Jquery getJSON 未使用有效的 json 响应触发回调
我有一个返回有效 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这不是有效的 JSON。 JSONLint 似乎(最近?)声称原始字符串是有效的 JSON。这不是真的。 JSON 根必须始终是数组或对象。 RFC 4627 说:
,因此您需要包含回调,而您没有在响应中显示该回调。
因此,如果实际 URL 为 http://localhost:37280/sites/1/encode?callback=jsonp1234
其中
jsonp1234
是由选择的函数名称jQuery,响应一定是:注意,这和所有 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:
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:Note that this, like all JSONP, is actually JavaScript. This is how it can be cross-domain.