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 + SunlightLabs API 帮助