Jquery getJSON 未使用有效的 json 响应触发回调

发布于 2024-10-27 00:52:16 字数 1002 浏览 1 评论 0原文

我有一个返回有效 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();
  });
});

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

I've got a server that's returning valid json objects (as validated by jsonlint.com) that look like this:

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

My html file looks like this:

<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 looks like this:

$(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();
  });
});

When I click on "Click" the Chrome network console indicates that the request is sent, my server logs confirms that the request is received and chrome indicates it receives the above json string. But then nothing happens. I don't get the alert which leads me to believe my callback isn't executing. Any help would be greatly appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傾旎 2024-11-03 00:52:16

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

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

,因此您需要包含回调,而您没有在响应中显示该回调。

因此,如果实际 URL 为 http://localhost:37280/sites/1/encode?callback=jsonp1234

其中 jsonp1234 是由选择的函数名称jQuery,响应一定是:

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

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

That is not valid JSON. JSONLint seems to (newly?) claim that a raw string is valid JSON. This is not true. The JSON root must always be an array or object. RFC 4627 says:

"A JSON text is a serialized object or
array."

Also, you're using JSONP, so you need to include the callback, which you haven't shown in your response.

So if the actual URL is http://localhost:37280/sites/1/encode?callback=jsonp1234

where jsonp1234 is a function name chosen by jQuery, the response must be:

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

Note that this, like all JSONP, is actually JavaScript. This is how it can be cross-domain.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文