使用jQuery getJSON“无效标签”Firebug错误

时间:2010-05-12 20:42:20

标签: javascript jquery validation jsonp firebug

我正在向另一个域发出jQuery $.getJSON请求,所以我确保我的GET URI以“callback =?”结尾(即使用JSONP)。

Firebug的NET面板显示我正在按预期接收数据,但由于某种原因,控制台面板记录以下错误:“无效标签”。

JSON使用JSONLint进行验证,因此我怀疑数据结构是否存在任何真正的错误。

我可能会收到此错误的任何想法?

2 个答案:

答案 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是回调参数的值。