跨域Ajax调用找不到元素位置:moz-nullprincipal
我正在尝试通过 jquery 调用 $.ajax()
调用跨域 Web 服务 服务返回
<?xml version="1.0" encoding="utf-8"?>
<double xmlns="http://www.webserviceX.NET/">1.4248</double>
如果我指定 dataType xml (或未指定任何内容 - jquery 猜测正确),我将得到 XML 解析错误:找不到元素位置:moz-nullprincipal:{4030734c-b902-4251-9067-1d1b5b15fc72} 行号1,第 1 列:
错误(看起来服务没有返回任何内容)。但是,如果我指定 dataType jsonp
或 script
- 我可以在 firebug 中看到一切都正确返回;然而jquery显然试图评估结果并给出相应的错误(缺少分号或类似的错误)。
jQuery 中有没有一种方法可以启用跨域调用并且不对其进行评估?
注意:
- 我知道后备选项是调用我的服务器上的一个程序,该程序将调用 Web 服务并将结果返回到浏览器;
- 我确实指定了 crossDomain: true。似乎没有什么区别。
- “错误”函数确实被调用。但“数据”包含“parseerror”而不是原始值。
I am trying to invoke a cross-domain web service through jquery call $.ajax()
The service returns
<?xml version="1.0" encoding="utf-8"?>
<double xmlns="http://www.webserviceX.NET/">1.4248</double>
If I specify dataType xml (or not specifying anything - jquery guesses correctly), I am getting XML Parsing Error: no element found Location: moz-nullprincipal:{4030734c-b902-4251-9067-1d1b5b15fc72} Line Number 1, Column 1:
error (looks like nothing is coming back from the service). However, if I specify dataType jsonp
or script
- I can see in firebug that everything is coming back correctly; however jquery apparently tries to eval the results and gives me corresponding error (missing semicolon or similar).
Is there a way in jQuery to enable cross-domain call and not evaluate it?
Notes:
- I know that the fallback option is to call a program on my server that will invoke the web service and return the result to the browser;
- I did specify crossDomain: true. It doesn't seem to make any difference.
- "error" function does get invoked. But instead of original value "data" contains "parseerror".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
跨域 ajax 只允许 JSONP,而不是 XML
在 JQuery 1.5 中,他们添加了
crossDomain:true
参数,该参数只是将?callback=>
值附加到网址
。如果设置该参数,则还必须设置dataType:'json'
。跨域 URL 还必须支持 JSONP 并提供您期望的数据。Cross domain ajax is only allowed for JSONP, not XML
In JQuery 1.5 they added the
crossDomain:true
parameter which simply appends a?callback=>
value to theurl
. If you set that parameter, you must also setdataType:'json'
. The cross-domain URL must also support JSONP and be serving up your expected data as such.