将javascript全局变量设置为JSONresult?

如何在onload事件中将js全局变量设置为json结果集?

var global = []; $.getJSON("/", function(data) { $.each(data, function(key, val) { global.push(val); }); }); 

global在加载时没有设置值,我需要在json调用之外访问它…

又是你。 也许试试吧

 var result; $.ajax({ url: '<%: Url.Action("myUrl", "con") %>/', dataType: 'json', async: false, success: function(data) { result = data; } }); // process result here 

您不需要将global设置为数组。 只需指定值即可。

 var global = null; $.getJSON("<%: Url.Action("myUrl", "con") %>/", function(data) { $.each(data, function(key, val) { global = val; }); }); 

该代码应该可以正常工作。 ( 实时拷贝 )听起来有一个问题,即ajax调用没有以你期望的forms返回数据。

正如@marc(间接)指出的那样,您必须了解ajax调用和事件模型的本质。 解析JS文件后立即执行ajax调用, 异步返回结果。 所以,你的代码时间表看起来像

 00 set global = [] 01 AJAX call /someurl/ -------------------\ 02 check global /* it's empty */ \ 03 do something else [process AJAX call on server, send result] ... / 42 AJAX call is completed <----------------/ 43 call success ----------------------------------> global.push(result) 44 at this point of time you can access global 

这是时间表,而不是执行顺序。 AJAX调用和响应之间的时间可能是任意的,包括超时或服务器端错误的情况

那你该怎么办?

1)JS的正常解决方案 – 一个回调,你已经拥有的成功函数也可以

1.1)设置全局并调用其他函数,或

1.2)使用数据执行所需的操作

2)事件 – 如果你想在代码的多个部分中使用数据,那么更好,阅读jQuery事件机制

3)同步调用,正如@marc所暗示的那样 – 在99%的情况下应该避免这种情况。 我知道可能需要它的唯一情况是你需要从第三方源请求强制数据,甚至在这种情况下你可以在服务器上执行它(尽管至少可以接受同步AJAX)