我必须做一些非常简单的事情,但似乎没有一个简单的方法来做到这一点,就我所知。我只想从远程源加载JSON数据,并使用jQuery将其存储在全局Javascript变量中。这里是我有:
var my_json; $.getJSON(my_url,function(json) { var my_json = json; });
my_json变量保持未定义。我认为这显然是一个范围问题。在我看来,$ .getJSON方法应该返回JSON,但它返回一个XMLHttpRequest对象。如果我这样做:
request = $.getJSON(my_url); my_json = request.responseText.evalJSON();
这不工作,因为直到readystate == 4,respondetext保持为null。看来你必须使用回调函数来返回responsetext,因为它成功时触发。
它不能这么难!对?
解决方法
这将做到:
var json = (function () { var json = null; $.ajax({ 'async': false,'global': false,'url': my_url,'dataType': "json",'success': function (data) { json = data; } }); return json; })();
主要的问题是$ .getJSON将异步运行,因此你的Javascript将超过表达式,即使在它的成功回调触发之前调用它,所以不能保证你的变量将捕获任何数据。
特别注意上面的ajax调用中的’async’:false选项。 manual说:
By default,all requests are sent asynchronous (i.e. this is set to true by default). If you need synchronous requests,set this option to false. Note that synchronous requests may temporarily lock the browser,disabling any actions while the request is active.