jQuery getJSON 的“无效标签”Firebug 错误

Posted

技术标签:

【中文标题】jQuery getJSON 的“无效标签”Firebug 错误【英文标题】:"invalid label" Firebug error with jQuery getJSON 【发布时间】:2011-02-18 20:08:34 【问题描述】:

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

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

JSON 使用JSONLint 进行验证,因此我怀疑数据结构是否存在任何问题。

任何想法为什么我可能会收到此错误?

【问题讨论】:

请向我们展示 JSONP 请求呈现的 javascript 【参考方案1】:

这是一个旧帖子,但我还是发布了回复:

假设您要获取以下文件“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.

【讨论】:

非常感谢您的旧但有效的答案。我在文档中没有看到任何内容!【参考方案2】:

您似乎在服务器脚本中误用了 JSONP。

当你收到一个带有回调参数的请求时,你应该呈现以下内容:

callbackName( "myName": "myValue");

其中callbackName是回调参数的值。

【讨论】:

jQuery 规范允许“callback=?”使用 jQuery.getJSON 时。这会将响应包装在回调函数中。 @jerome:是的,但是您的服务器端脚本必须支持它。 JSONP 并不神奇。 感谢您对此的见解。如果您有时间,请参阅下面的链接以获取我的测试用例。我还没有足够的信息知道为什么跨域请求不允许我使用数据。 thespacebetweenthewords.org/json_test/test_jsonp_request.html 向另一个域发出请求。 Firebug 中出现“invalid label”控制台错误,无法使用数据。 globaloperative.info/json_test/test_json_request.html 向同一个域发出请求。正确检索和评估数据。 您需要服务器端代码来发出函数调用。 JSONP 不会神奇地从不同的域中检索数据;它需要一个兼容的服务器端脚本来发出基于callback 参数的函数调用。见here。

以上是关于jQuery getJSON 的“无效标签”Firebug 错误的主要内容,如果未能解决你的问题,请参考以下文章

jQuery:处理 getJSON() 中的错误?

jQuery $.getJSON() 失败

jQuery:请求 getJSON + SunlightLabs API 帮助

jQuery 中 $.getJSON() 和 $.ajax() 的区别

jQuery中$.getJSON

jQuery 返回 $.getJSON 值