51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 8927|回复: 14
打印 上一主题 下一主题

[原创] 用loadrunner如何取ajax Response中的内容,显示乱码啊?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-6-20 11:23:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ajax Response body返回值如下:
<a href="javascript:void(0)" onclick=ShowRoomOtherInfo('6daefad473ae4f9c8067b62ddf7adec5')><u>鍗曚汉鎴?/u></a></td><td align=center valign=middle class=btgry> RMB 3278</td><td align=center valign=middle class=btgry>銕?/td><td align=center valign=middle class=btgry></td><td align=center valign=middle class=btgry></td><td align=center valign=middle class=btgry><a href="javascript:void(0)" onclick="AddToOrder('2125411','PLAZA(PLAZA ROOM) 骞垮満閰掑簵锛堝箍鍦烘埧锛?,'鍗曚汉鎴?,'','','','2011-7-1,3278','2011-07-01','2011-07-02')" >
红色标示部分为要取的值
写的脚本如下:
//匹配hotelid和hotelname
                web_reg_save_param_ex(
                "ParamName=RoomName",
                "LB=<u>",
                "RB=?/u>",
                SEARCH_FILTERS,
                "Scope=Body",
                "RequestUrl=*hotel.xxx.com/Ajax/HotelInternational.ashx*",
                LAST);
                web_reg_save_param_ex(
                "ParamName=RoomPrice",
                "LB=\'\',\'\',\'",
                "RB=\'",
                SEARCH_FILTERS,
                "Scope=Body",
                "RequestUrl=*hotel.xxx.com/Ajax/HotelInternational.ashx*",
                LAST);
        //酒店房型返回值
        web_custom_request("HotelInternational.ashx_2",
                "URL=http://hotel.xxx.com/Ajax/HotelInternational.ashx",
                "Method=POST",
                "Resource=0",
                "RecContentType=text/plain",
                "Referer=http://hotel.xxx.com/HotelInternationalDetail.aspx?strCityId={CityCode}&strInfoCode={HotelCode}&checkin={StartDay}&checkout={EndDay}",
                "Snapshot=t14.inf",
                "Mode=HTML",
                //"Body=type=pricelist&hotelcode={HotelCode}&hotelid={hotelIDName}&checkin={StartDay}&checkout={EndDay}&cityid={CityCode}",
                "Body=type=pricelist&hotelcode={HotelCode}&hotelid={HotelId}&hotelname={HotelName}&checkin={StartDay}&checkout={EndDay}&cityid={CityCode}",
                LAST);
运行脚本后提示错误没找到rooname?我应该如何处理ajax返回内容中的乱码数据??能否取值后转成正常的中文显示?请高手指教
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2
回复

使用道具 举报

该用户从未签到

2#
发表于 2011-6-20 14:43:50 | 只看该作者
对于ajax的返回内容由于无法被lr直接做utf-8的转换所以你需要自己用LR的转换函数对编码进行变化

函数貌似是lr_convert_string,记得不是很清楚了
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2011-6-20 15:27:51 | 只看该作者
楼上所说函数应该是lr_convert_string_encoding才是,具体参数可以看看帮助文档,希望对你有帮助。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2011-6-20 18:01:56 | 只看该作者
回复 3# lix43420
回楼上,小弟愚钝,话说网上找到的始终都是将中文转为utf-8,没说咋把utf-8转成中文啊。。。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2011-6-20 18:03:52 | 只看该作者
怎么把utf-8转成中文嘞,请高手们赐教,
容忍俺问这个小白问题吧。。实在是走投无路了。。请指教啊。。。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2011-6-20 20:24:56 | 只看该作者
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2011-6-21 09:39:27 | 只看该作者
回复 6# 云层
谢谢云层提供的资料,终于转成中文了,哈哈
lr_convert_string_encoding(lr_eval_string("{RoomName}"),"utf-8",NULL,"my");
这里使用函数lr_convert_string_encoding函数,将RoomName参数中的utf-8编码转换为当前系统的编码
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2011-6-21 09:40:54 | 只看该作者
本帖最后由 luxiuxiu1987 于 2011-6-21 09:45 编辑

话说,匹配roomname的时候,
web_reg_save_param_ex(
"ParamName=RoomName",
"LB=<u>",
"RB=/u>",
  SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*hotel.xxx.com/Ajax/HotelInternational.ashx*",
LAST);
显示无法找到,只能把问号去掉进行匹配,
web_reg_save_param_ex(
"ParamName=RoomName",
"LB=<u>",
"RB=/u>",
  SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*hotel.xxx.com/Ajax/HotelInternational.ashx*",
LAST);
才能得到的结果是:鍗曚汉鎴?,进行转码后变成:单人房<;
多出个单边的尖括号,咋处理呢?为啥不能一开始的时候就把尖括号去掉呢?
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2011-6-21 10:20:39 | 只看该作者
你关联的时候多做点,或者回头用lr_save_var自己去过滤掉最右边的几个字符
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2011-6-21 11:12:27 | 只看该作者
再次感谢云层大人的回答,
本人查找相关资料如下
lr_save_var
C Language
int lr_save_var (const char * param_value, unsigned long const value_len, unsigned long const options, const char * param_name);
param_value:参数值
value_len:值的字节长度
options:参数选项,一般为0。
param_name:参数名称。
lr_save_var函数把指定的变长字符串赋值给参数。这个函数在关联查询的时候非常有用。需要使用lr_eval_string来确定参数的值。
例子:
在下面的例子中, lr_save_var 用来限制参数的长度。
Action()
{
       #define MAX_NAME_LEN 4
// 创建参数, InName
       lr_save_string("Fitzwilliam", "InName");
// 把 "InName"的前四个字节保存到 "ShortName"
       lr_save_var( lr_eval_string("{InName}"),
              MAX_NAME_LEN, 0, "ShortName");
       return 0;
}
Output:
Action.c(8): Notify: Saving Parameter "InName = Fitzwilliam"
Action.c(10): Notify: Saving Parameter "ShortName = Fitz"
前面关联的左右边界都是静态的。
但因为我需要取值得roomname,左边界是动态的,并且系统返回的RoomName是不定长度的,仅仅通过一个关联函数是无法处理的,这个时候还需要使用一个函数strtok()来进行字符内容切割(类似于正则表达式)。
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2011-6-21 11:14:36 | 只看该作者
帮助有东西没有告诉你
lr_save_var可以这样写lr_save_var(x+2,...,....)你可以指定第几位开始取多少位的
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2011-6-21 11:36:07 | 只看该作者
使用方法如下:
char *token;
char temp[100];
lr_convert_string_encoding(lr_eval_string("{RoomName}"),"utf-8",NULL,"myroom");//将utf-8转成系统当前的编码
strcpy(temp,lr_eval_string("{myroom}"));//取出参数值,并且赋值给变量temp  
token=(char *)strtok(temp,"<");//使用<符号作为分隔符
lr_error_message(token);
能取出正常房间名称
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2011-7-1 15:28:00 | 只看该作者
学习了,都是高手,受菜鸟一拜。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2014-12-25 17:12
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    14#
    发表于 2015-1-4 13:55:17 | 只看该作者
    谢谢分享,写得有始有终 赞一下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2016-10-14 09:26:13 | 只看该作者
    luxiuxiu1987 发表于 2011-6-21 09:39
    回复 6# 云层
    谢谢云层提供的资料,终于转成中文了,哈哈
    lr_convert_string_encoding(lr_eval_string(" ...

    在吗?请问这段代码要放置在哪里啊?
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-6 21:41 , Processed in 0.077319 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表