车仔
车仔
  • 发布:2014-10-13 19:53
  • 更新:2014-10-21 12:57
  • 阅读:5758

plus.net.XMLHttpRequest() 获取数据错误

分类:HBuilder

测试XMLHttpRequest跨域样例时发现如下错误,无法理解为什么出现这样的原因。

使用样例中的命令: xhr = new plus.net.XMLHttpRequest(); 有返回数据,但获取不到正确数据。

{{{
<?xml version="1.0" encoding="utf-8"?>
<response>
<error type="true" note="1001" servertime="2014-10-13 11:43:21"/>
</response>

}}}

去掉plus.net.,使用常规命令: xhr = new XMLHttpRequest(); 有返回数据,而且获取到正确数据。

{{{
<?xml version="1.0" encoding="utf-8"?>
<response>
<data language="cn" Id="1" />
<data language="en" Id="2" />
<data language="zh" Id="3" />
</response>
}}}

2014-10-13 19:53 负责人:无 分享
已邀请:
车仔

车仔 (作者)

没人知道plus.net.XMLHttpRequest()的bug吗?

DCloud_heavensoft

DCloud_heavensoft

你得提供更详细的信息。把代码和测试服务器提供下。
因为默认肯定是可以用的,你这么说我们也无法重现和排查。

plus的xhr是新封装的为了解决跨域而存在的api。

  • elaine

    返回的只能是字符串吗?

    2014-10-16 11:33

车仔

车仔 (作者)

我使用的是Html5+自带样例
{{{
路径是push>xhr.html
}}}
修改了样例中的网址
{{{
url="http://www.dcloud.net.cn/";
xmlhttp.open("GET",url);
}}}
换成了我自己需要的接口
{{{
url = "http://api3.golivetv.tv/golivetvAPI/api2/getChannelList-getChannelList.action";
xmlhttp.open("POST",url);
xmlhttp.send("<?xml version=\"1.0\" encoding=\"utf-8\"?><request website=\"http://api3.golivetv.tv/golivetvAPI/api2/getChannelList-getChannelList.action\"><parameter iname=\"GetChannelList\" type=\"2\" language=\"en\" region=\"CN\"> <device devmodel=\"Android on nt72668 TCL\" dnum=\"404500646\" didtoken=\"8fdde03c0d724ef4a21607aefb9ddbcf\" dver=\"x\" devtype=\"1\" clienttype=\"TCL-AU-NT667K-S1\" /><live mac=\"5C36B82D4C22\" deviceid=\"3c8680aa47b21317a2bd9d37f43491d8a617efba\" livetoken=\"5d64e091da53885ffdc4df7b185d9b86\" livever=\"\"/><user userid=\"10090\" token=\"dc03e5039b354fd3b1f8fca85572e7f4\" uver=\"1\" /><data limit=\"0\" startseq=\"0\" /></parameter></request>");
}}}

现象是能正常访问,但拿不到正确数据。后来发现:
样例中的命令用了“plus.net.”字符串,有返回错误数据,但获取不到正确数据。
{{{
xhr = new plus.net.XMLHttpRequest();
}}} 。
后来我去掉“plus.net.”字符串,使用常规命令,有返回数据,而且获取到正确数据。
{{{
xhr = new XMLHttpRequest();
}}}

怀疑是plus.net.XMLHttpRequest()方式没有正确Send参数。还请帮忙查验。

  • elaine

    我使用此方法,status一直为0 ,求解

    2014-10-21 14:20

车仔

车仔 (作者)

有人知道plus.net.XMLHttpRequest()和原生XMLHttpRequest()的区别吗?

DCloud_heavensoft

DCloud_heavensoft

@Array 给看下这个代码哪里有问题。

DCloud_App_Array

DCloud_App_Array

这个问题是plus xhr提交中http头默认Content-Type值为application/x-www-form-urlencoded导致。
iOS平台可以添加脚本手动指定类型:xhr.setRequestHeader('Content-Type','text/xml;charset=utf-8');
Android平台处理逻辑有bug,暂时无法避免,我们会尽快更新解决

  • elaine

    什么时候能更新解决好了~~项目正 用着呢……使用plus.net.XMLHttpRequest()方式,status一直为0

    2014-10-21 14:21

该问题目前已经被锁定, 无法添加新回复