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

use*_*882 2 javascript ajax jquery scope function

我正在使用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...
Run Code Online (Sandbox Code Playgroud)

上面的代码生成错误" items is not defined" some_conditionfalse什么时候(我认为这是因为变量范围不正确).

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


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

Fla*_*vio 9

只需使ajax函数不异步

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
}
Run Code Online (Sandbox Code Playgroud)

  • 这意味着在请求完成之前您无法执行任何其他操作,ajax调用之下的任何其他操作将被停止,直到完成 (2认同)

Akh*_*ran 3

做这个:

由于您将其称为异步,因此您应该在回调函数中分配它

var result = []; 


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

并为了您更好的理解。

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

  1. 最初它是一个长度= 0的数组;
  2. 您调用 ajax 函数。
  3. 结果数组的长度仍然是0。
  4. Ajax 调用完成并执行 success 函数。
  5. 在成功函数中,您将结果分配给响应数据。
  6. 现在结果数组的长度不再为零。
  7. 该值在全局范围内更新。
  8. 您可以在代码中的任何位置使用结果数组