我正在对另一个域执行以下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 2013年6月20日)”
我对自己缺少的东西缺乏想法。 (这可能是直截了当的,但我已经激动了,我的烦恼阻碍了我意识到这可能是什么。)
修改
在被指出返回的JSON对象的有效性是强制性的之后,我通过浏览器的URL行测试了一些不同的输出,如下所示。这些似乎都没有改变 parsererror 问题,尽管从JS进行调用时。我还能做错什么?
“{result:\”pong at 12:42:06 2013年6月20日\“}”
“jsonCallback('{result:\”pong at 12:49:54 2013年6月20日\“}')”
修改
@。ajax 的解析器实际上非常宽容。但是,需要激活 web.config 中的跨域脚本访问权限,如下所示。并确保您在正确的端点上执行此操作。
<webHttpBinding>
<binding name="UrlHttpBindingJsonP"
crossDomainScriptAccessEnabled="true"/>
</webHttpBinding>
请参阅this article。
答案 0 :(得分:1)
jsonCallback(pong @ 10:38:46 20-Jun-2013)
这不是有效的JavaScipt。首先,参数应该用引号括起来,所以它是一个字符串。
jsonCallback("pong @ 10:38:46 20-Jun-2013")
不确定它是否真的重要,但是一个普通的旧字符串仍然无效JSON *。您可能需要将其包装在对象或数组中。试试这个:
jsonCallback({"result": "pong @ 10:38:46 20-Jun-2013"})
*如果你接受Crockford的定义。查看评论。