我怎样才能从$ .getJSON函数返回一个variables

我想返回StudentId以在$.getJSON() 范围以外的地方使用

 j.getJSON(url, data, function(result) { var studentId = result.Something; }); //use studentId here 

我可以想象这与范围确定有关,但它似乎并没有像c#那样工作

是的,我之前的回答不起作用,因为我没有注意到你的代码。 🙂

问题在于匿名函数是一个callback函数 – 也就是说,getJSON是一个asynchronous操作,它会在某个不确定的时间点返回,所以即使variables的作用域在匿名函数之外(即闭包)没有你会认为应该的价值:

 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值执行的代码都需要该callback函数中执行,或者执行callback函数之后

它似乎并没有像C#那样工作

要完成与C#类似的范围,请禁用asynchronous操作并将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执行asynchronous导致的问题。 代替将所有代码重构到$.ajax方法,只需在主.js文件的顶部插入以下代码即可禁用asynchronous行为:

  $.ajaxSetup({ async: false }); 

祝你好运!

如果你希望委托给其他函数,你也可以使用$ .fn扩展jquery。 符号如下所示:

var this.studentId = null; $.getJSON(url, data, function(result){ $.fn.delegateJSONResult(result.Something); } ); $.fn.delegateJSONResult = function(something){ this.studentId = something; }
var this.studentId = null; $.getJSON(url, data, function(result){ $.fn.delegateJSONResult(result.Something); } ); $.fn.delegateJSONResult = function(something){ this.studentId = something; } 
 var context; $.ajax({ url: 'file.json', async: false, dataType: 'json', success: function (json) { assignVariable(json); } }); function assignVariable(data) { context = data; } alert(context); 

嗯,如果你已经用StudentId属性序列化一个对象,那么我认为它将是:

 var studentId; function(json) { if (json.length > 0) studentId = json[0].StudentId; } 

但是,如果你只是返回StudentId本身,也许是:

 var studentId; function(json) { if (json.length > 0) studentId = json[0]; } 

编辑:或者.length甚至不需要(我只在JSON中返回generics集合)。

编辑#2,这个工程,我刚刚testing:

 var studentId; jQuery.getJSON(url, data, function(json) { if (json) studentId = json; }); 

编辑#3,这里是我使用的实际JS:

 $.ajax({ type: "POST", url: pageName + "/GetStudentTest", contentType: "application/json; charset=utf-8", dataType: "json", data: "{id: '" + someId + "'}", success: function(json) { alert(json); } }); 

而在aspx.vb中:

 <System.Web.Services.WebMethod()> _ <System.Web.Script.Services.ScriptMethod()> _ Public Shared Function GetStudentTest(ByVal id As String) As Integer Return 42 End Function