就是想不通。我有一个存储为 JSON 文件的大对象,我想访问它一次并使用它多次:
var myjson = new Object();
$.getJSON("myJSON.js", function(json) {
myjson = JSON.stringify(json);
});
$('#console').append(myjson);
这没有任何作用。我知道这是一个范围问题。我只是不知道如何做我想做的事。我必须在 $.getJSON 调用中执行所有函数吗?还是有办法传递我可以在整个运行时使用的对象?
最佳答案
It's a scope issue, I know.
不,这不是范围问题。这是您对 AJAX 工作原理的理解的问题。 AJAX 是异步的。这意味着当您发送 AJAX 请求时,发送此请求的函数(在您的情况下为 $.getJSON
)立即返回。仅应在成功回调中使用结果。这个回调函数可以稍后调用。这实际上并不取决于您在未来的什么时候会发生这种情况。如果您的服务器出现错误,实际上可能永远不会发生。
因此,唯一可以可靠地使用 AJAX 调用后服务器发送的结果的地方是在成功回调中:
$.getJSON("myJSON.js", function(json) {
// here and only here you can access the results of your AJAX call.
$('#console').append(JSON.stringify(json));
});
您可以做一些可怕的事情,例如对服务器执行同步调用:
var myjson = { };
$.ajax({
url: 'myJSON.js',
dataType: 'json',
async: false,
success: function(json) {
myjson = JSON.stringify(json);
}
});
$('#console').append(myjson);
async: false
选项进行同步调用。显然,这完全违背了 AJAX 的全部目的,因为它会在此调用期间卡住浏览器。您最好直接将 myJSON.js
包含为脚本标记:
<script type="text/javascript" src="myJSON.js"></script>
您可能从这种方法中获得的另一个好处是,浏览器将确保您在执行任何其他脚本之前完全加载该脚本。因此,以下内容可以正常工作:
<script type="text/javascript" src="myJSON.js"></script>
<script type="text/javascript">
var myjson = someJavascriptVariableThatYouDeclaredInMyJSON;
</script>
然后是:
<script type="text/javascript">
$('#console').append(JSON.stringify(myjson));
</script>
关于jquery - 如何从文件中获取 json 数据(jQuery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253179/