如何将变量设置为AJAX响应数据?

时间:2012-11-23 04:31:17

标签: javascript jquery ajax function scope

我正在使用jQuery,我有以下代码:

var result = [];

if ( some_condition ) {
  result = [...]
} else {
  $.ajax({
    url:      some_url,
    data:     some_data,
    dataType: 'json',
    success:  function(data) {
      items = data
    }
  });

  result = items
}

// Playing with the 'result' variable...

items is not definedsome_condition时,上述代码会生成错误“false”(我认为这是因为变量范围不正确)。

我想将result变量设置为AJAX响应数据,但我不知道如何解决问题。


注意:我正在尝试这样做,因为我想使用result变量之外的if ... else语句(即, 上面代码中的if ... else语句之后。

2 个答案:

答案 0 :(得分:6)

只需将ajax函数设为noync

即可
var result = [];

if ( some_condition ) {
  result = [...]
} else {
    $.ajax({
    url:      some_url,
    data:     some_data,
    dataType: 'json',
    async: false, 
    success:  function(data) {
        items = data
    }
    });
   result = items
}

答案 1 :(得分:3)

这样做:

由于您将其称为异步,因此应在回调函数

中指定它
var result = []; 


if ( some_condition ) {
  result = [...]
} else {
  $.ajax({
    url:      some_url,
    data:     some_data,
    dataType: 'json',
    success:  function(data) {
      result = data;
      validateResult(result);
    }
  });
}

为了更好地理解。

您的结果数组是一个全局变量。

  1. 最初是一个长度为0的数组;
  2. 你打电话给你的ajax功能。
  3. 结果数组的长度仍为0.
  4. Ajax调用完成并执行成功函数。
  5. 在成功功能中,您可以将结果分配给响应数据。
  6. 现在结果数组的长度不再为零。
  7. 全球价值已更新。
  8. 您可以在代码中的任何位置使用结果数组