我怎样才能从$ .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