JSONP调用产生parsererror,不调用回调函数

时间:2013-06-20 10:41:42

标签: javascript ajax web-config jsonp

我正在对另一个域执行以下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

1 个答案:

答案 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的定义。查看评论。