我想返回StudentId
到外的其他地方使用范围的$.getJSON()
j.getJSON(url, data, function(result) { var studentId = result.Something; }); //use studentId here
我猜想这是与范围有关,但它似乎不相同的方式工作C#不
它似乎与c#的工作方式不同
要完成类似于C#的作用域,禁用异步操作并将dataType设置为json:
var mydata = []; $.ajax({ url: 'data.php', async: false, dataType: 'json', success: function (json) { mydata = json.whatever; } }); alert(mydata); // has value of json.whatever
是的,我以前的回答不起作用,因为我没有注意你的代码.:)
问题是匿名函数是一个回调函数 - 即getJSON是一个异步操作,它会在某个不确定的时间点返回,所以即使变量的范围超出了那个匿名函数(即一个闭包),它也会没有你认为它应该具有的价值:
var studentId = null; j.getJSON(url, data, function(result) { studentId = result.Something; }); // studentId is still null right here, because this line // executes before the line that sets its value to result.Something
您希望使用getJSON调用设置的studentId值执行的任何代码都需要在该回调函数内或在回调执行后发生.
甚至比以上所有更简单.如前所述,$.getJSON
执行导致问题的异步.不要将所有代码重构到$.ajax
方法,只需在主.js文件的顶部插入以下内容即可禁用异步行为:
$.ajaxSetup({ async: false });
祝好运!