【发布时间】:2012-06-28 12:02:14
【问题描述】:
标题是我总结的最好方式。如何解释这个有点模糊。 基本上,如果我在 html 文件中包含保存 JSON 函数的 javascript 文件,则触发 JSON 函数 - 回调有效。但是,如果我只是从它自己的文件中调用 JSON 函数 - 回调永远不会触发。不确定这是否是某种 javascript 或网络浏览器安全功能。非常感谢您的解释。
这里有一些例子。
工作版本:
json.html:(修剪)
<html>
<head><script type="text/javascript" src="json.js"></script></head>
<script>
JSON_Object(json_url, function(json_obj) {
alert(json_obj); // this version works!
});
</script>
<html>
json.js:
function JSON_Object(json_url, callback) {
// This function will return an object to the JSON data.
json_url = json_url + "&callback=jsonCallback";
var json_script = document.createElement("script");
json_script.setAttribute("src", json_url);
json_script.setAttribute("type", "text/javascript");
window.jsonCallback = function(jsonObjReturn) {
// cleanup
document.body.removeChild(json_script);
delete window[callback];
callback(jsonObjReturn); // use our callback function to return the data.
}
document.body.appendChild(json_script);
}
非工作版本 - json.js 中的另一个函数:
JSON_Object(content_page, function(json_obj) {
alert(json_obj); // This version doesn't work. Never called.
});
【问题讨论】:
-
有什么错误吗?这一行:
delete window[callback];。你可能想要delete window.jsonCallback;。不过应该没关系。 -
实际上,现在我检查了。我确实在 json_url.php 上遇到错误。错误:“未捕获的 ReferenceError:未定义 jsonCallback”我正在使用 Chrome 并在元素视图中看到了这一点。应该注意的是,在它不起作用的情况下,该脚本是由 Chrome 扩展加载的 UserScript。我假设这与它有关。可能是某种范围的界定。
-
给我们更多信息。脚本究竟是如何加载的,扩展的作用是什么?通常扩展和背景页面是分开的。因此,
window变量在后台是其他东西,在扩展中是其他东西。 -
当然,没问题。我只是不知道这很重要。好的,让我们试着解释一下。正如我之前的评论所说,这是一个 javascript 文件,它是在开发模式下加载到 Chrome 中的用户脚本。该文件旨在影响网页,但实际上并未托管在服务器上。 IE:像任何其他扩展/用户脚本一样修改网页的外观。作用是使用 JSON 从另一台服务器(我的服务器)检索数据。 window 变量的作用域是有意义的。我假设 window.jsonCallback 函数在作为 UserScript 加载时对文件不可用。
标签: javascript json callback jsonp undefined