我正在对另一个域执行以下 AJAX 调用。
$.ajax({
url: "http://.../MyService.svc/Ping",
dataType: 'jsonp',
jsonp: 'callback',
processData: false,
jsonpCallback: 'jsonCallback',
success: function (a, b, c) { notify("Wheee..."); },
error: function (a, b, c) { notify("Buuu... " + a + "-" + b + "-" + c); }
});
我得到了连接,状态是200 OK。但是,我收到了对错误方法的调用,该方法通知我没有调用parsererror和jsonCallback。我看到的 URL 看起来像这样。
[12:29:55.807] GET =1371724195683">http://.../MyService.svc/Ping?callback=jsonCallback&=1371724195683 [HTTP/1.1 200 OK 1912ms]
该服务配置为提供 JSON 格式。如果我在浏览器的 URL 行中手动输入呼叫,屏幕上的响应会显示这一点。
“jsonCallback(pong @ 10:38:46 20-Jun-2013)”
我对我所缺少的东西一无所知。(这可能是直截了当的事情,但我很激动,我的烦恼阻碍了我意识到那可能是什么。)
编辑:
在被指出返回的 JSON 对象的有效性是强制性的之后,我通过浏览器的 URL 行测试了几个不同的输出,如下所示。尽管从 JS 进行调用时,这些似乎都没有改变解析器错误问题。我还能做错什么?
"{结果:\"pong at 12:42:06 20-Jun-2013\"}"
"jsonCallback('{result: \"pong at 12:49:54 20-Jun-2013\"}')"
编辑:
@.ajax的解析器实际上非常宽容。但是,on 需要在web.config中激活跨域脚本访问,如下所示。并确保您在正确的端点上执行此操作。
<webHttpBinding>
<binding name="UrlHttpBindingJsonP"
crossDomainScriptAccessEnabled="true"/>
</webHttpBinding>
见这篇文章。