我有一台服务器正在返回有效的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字符串。但后来没有任何反应。我没有得到警告,导致我相信我的回调没有执行。任何帮助将不胜感激!
答案 0 :(得分:3)
这不是有效的JSON。 JSONLint似乎(新?)声称原始字符串是有效的JSON。这不是真的。 JSON根必须始终是数组或对象。 RFC 4627说:
“JSON文本是序列化对象或 阵“。
此外,您正在使用JSONP,因此您需要包含回调,而回调中没有显示回调。
因此,如果实际网址为http://localhost:37280/sites/1/encode?callback=jsonp1234
其中jsonp1234
是jQuery选择的函数名,响应必须是:
jsonp1234({"encryption": {"key": "gKV0oPJwC5CBQxmn"}});
请注意,与所有JSONP一样,这实际上是JavaScript。这就是跨域的方式。