我正在向另一个域发出jQuery $.getJSON
请求,所以我确保我的GET URI以“callback =?”结尾(即使用JSONP)。
Firebug的NET面板显示我正在按预期接收数据,但由于某种原因,控制台面板记录以下错误:“无效标签”。
JSON使用JSONLint进行验证,因此我怀疑数据结构是否存在任何真正的错误。
我可能会收到此错误的任何想法?
答案 0 :(得分:11)
这是一篇旧帖子,但无论如何我都会发布回复:
假设您要获取由以下文件“get_json_code.php”生成的jSON代码:
<?php
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
?>
就像你提到的那样,当你添加“jsoncallback =?”时,$ .getJSON()会使用JSONP。所需URL字符串的参数。例如:
$.getJSON("http://mysite.com/get_json_code.php?jsoncallback=?", function(data){
alert(data);
});
但是,在这种情况下,您将在Firebug中收到“无效标签”消息,因为“get_json_code.php”文件未提供有效的引用变量来保存返回的jSON字符串。要解决此问题,您需要将以下代码添加到“get_json_code.php”文件中:
<?php
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo $_GET['jsoncallback'].'('.json_encode($arr).')'; //assign resulting code to $_GET['jsoncallback].
?>
这样,生成的JSON代码将被添加到'jsoncallback'GET变量中。
总之,“jsoncallback =?” $ .getJSON()URL中的参数做了两件事:1)它将函数设置为使用JSONP而不是JSON,2)指定将保存从“get_json_code.php”文件中检索的JSON代码的变量。您只需要确保他们拥有相同的名字。
希望有所帮助,
VQ。
答案 1 :(得分:3)
看起来你在服务器脚本中滥用了JSONP。
当您收到带回调参数的请求时,您应该呈现以下内容:
callbackName({ "myName": "myValue"});
其中callbackName
是回调参数的值。