繁体   English   中英

jQuery getJSON不触发具有有效json响应的回调

[英]Jquery getJSON not firing callback with valid json response

我有一台服务器正在返回有效的json对象(经jsonlint.com验证),如下所示:

"{\"encryption\": {\"key\": \"gKV0oPJwC5CBQxmn\"}}"

我的html文件如下所示:

<html>
  <head>
    <title>Testing Jsonp</title>
    <script type="text/javascript" src='jquery-1.4.4.js'></script>
    <script type="text/javascript" src='app.js'></script>
  </head>
  <body>
    <input type='text' value='thing' id='target' />
    <a href='' class='init'>Click</a>
  </body>
</html>

app.js看起来像这样:

$(document).ready(function(){
  $('.init').click(function(event){
    $.getJSON("http://localhost:37280/sites/1/encode?callback=?", { key: $("#target").attr('value') }, function(data){
      alert('Success!');
    });
    event.preventDefault();
  });
});

当我单击“单击”时,Chrome网络控制台指示已发送请求,我的服务器日志确认已接收到请求,而chrome表示已收到上述json字符串。 但是随后什么也没有发生。 我没有得到使我相信我的回调未执行的警报。 任何帮助将不胜感激!

那是无效的JSON。 JSONLint似乎(最近?)声称原始字符串是有效的JSON。 这不是真的。 JSON根必须始终是数组或对象。 RFC 4627说:

“ JSON文本是序列化的对象或数组。”

另外,您使用的是JSONP,因此您需要包括未在响应中显示的回调。

因此,如果实际网址是http:// localhost:37280 / sites / 1 / encode?callback = jsonp1234

其中jsonp1234是jQuery选择的函数名称,响应必须为:

jsonp1234({"encryption": {"key": "gKV0oPJwC5CBQxmn"}});

请注意,这和所有JSONP一样,实际上是JavaScript。 这就是跨域的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM