jquery - 如何从文件中获取 json 数据(jQuery)

标签 jquery json object

就是想不通。我有一个存储为 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/

相关文章:

javascript - Jquery如何使用momentjs翻译文本日期

javascript - $(...).sortable 不是函数

jquery - 从 JSON 获取数据到 jqGrid

c# - 清洁代码 : Should Objects have public properties?

java - Java中的多重继承即使类继承了Object

java - 如何在更改原始引用变量后再次引用 Java 对象

javascript - 返回数据在特定 if 语句中不起作用

javascript - Jplayer 播放列表全屏不工作

c# - 序列化 JSON 随机名称

c# - 如何将 JSON 反序列化为正确类型的对象,而无需事先定义类型?