1

我正在对另一个域执行以下 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。但是,我收到了对错误方法的调用,该方法通知我没有调用parsererrorjsonCallback。我看到的 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>

这篇文章

4

1 回答 1

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 的定义。见评论。

于 2013-06-20T10:44:04.573 回答