54

我想返回StudentId使用范围之外的其他地方$.getJSON()

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

//use studentId here

我想这与范围界定有关,但它似乎与 c# 的工作方式不同

4

6 回答 6

65

它似乎不像 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
于 2009-06-17T18:28:57.897 回答
41

是的,我之前的回答不起作用,因为我没有注意您的代码。:)

问题是匿名函数是一个回调函数 - 即 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 值执行的任何代码都需要该回调函数中或回调执行之后发生。

于 2008-08-27T20:19:51.580 回答
24

甚至比上面所有的都简单。如前所述,$.getJSON执行导致问题的异步。无需将所有代码重构为$.ajax方法,只需在主 .js 文件顶部插入以下内容即可禁用异步行为:

 $.ajaxSetup({
   async: false
 });

祝你好运!

于 2013-03-23T09:07:34.020 回答
2

如果您希望委托给其他功能,您还可以使用 $.fn 扩展 jquery。像这样的符号:


var this.studentId = null;

$.getJSON(url, data, 
    function(result){
      $.fn.delegateJSONResult(result.Something);
    }
);

$.fn.delegateJSONResult = function(something){
  this.studentId = something;
}


于 2009-01-30T02:48:36.047 回答
-1
var context;
$.ajax({
  url: 'file.json',
  async: false,
  dataType: 'json',
  success: function (json) {   
    assignVariable(json);
  }
});

function assignVariable(data) {
  context = data;
}
alert(context);
于 2017-07-09T16:08:07.040 回答
-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
于 2008-08-27T20:38:23.410 回答