我想将StudentId
返回到$.getJSON()
的范围之外的其他地方使用
j.getJSON(url, data, function(result)
{
var studentId = result.Something;
});
//use studentId here
我认为这与范围有关,但它似乎没有以同样的方式工作 c#
答案 0 :(得分:61)
它似乎没有相同的方式 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
答案 1 :(得分:39)
是的,我之前的回答不起作用,因为我没有注意你的代码。 :)
问题是匿名函数是一个回调函数 - 即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值执行的任何代码都需要在回调函数 或回调执行之后发生。
答案 2 :(得分:20)
比上述所有内容更简单。如前所述$.getJSON
执行async导致问题。而不是将所有代码重构为$.ajax
方法,只需在主.js文件的顶部插入以下内容即可禁用异步行为:
$.ajaxSetup({
async: false
});
祝你好运!
答案 3 :(得分:2)
如果您希望委托其他函数,您还可以使用$ .fn扩展jquery。这样的符号:
var this.studentId = null;
$.getJSON(url, data,
function(result){
$.fn.delegateJSONResult(result.Something);
}
);
$.fn.delegateJSONResult = function(something){
this.studentId = something;
}
答案 4 :(得分:-1)
var context;
$.ajax({
url: 'file.json',
async: false,
dataType: 'json',
success: function (json) {
assignVariable(json);
}
});
function assignVariable(data) {
context = data;
}
alert(context);
答案 5 :(得分:-2)
嗯,如果您使用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中的通用集合)。
编辑#2,这是有效的,我刚刚测试过:
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