JavaScript,Ajax,Json:如何使用一个值取决于json响应的变量?

时间:2013-05-16 16:26:22

标签: javascript ajax json

为什么在第9行中定义的x未定义为第11行?

<script>
  var x;
  $.ajax({
    dataType: "json",
    url: myurl,
    success: function(data){
      console.log(data);
      x = data;
      document.write(x);
    }
  });
  document.write(x);
</script>

4 个答案:

答案 0 :(得分:5)

因为你在这里有异步行为。 你的程序流程实际上是这样的:

1-你宣布x

2-您发出ajax请求

3-您将x写入文档(此时,x没有值)

4- ajax请求获得响应,并将x的值设置为该响应并将其写入文档。

你的问题不是范围问题,而是时间问题。

答案 1 :(得分:1)

这是因为在{Ajax(异步)回调函数成功执行之前执行line 11并将值设置为line 8

你可以这样做。

function MakeAjaxCall(callback)
{
  $.ajax({
    dataType: "json",
    url: myurl,
    success: function(data){
      console.log(data);
      callback(data);

    }
  });
}
function wantToCallAjaxAndUseResult()
{

    MakeAjaxCall(function(x){console.log(x)});
}

答案 2 :(得分:1)

这更多地与AJAX是异步的,而不是变量范围。控件立即进入行11,其中未定义x。但是,在8行执行后,行success将在未来的某个不确定点执行(即,在请求完成并调用并执行11回调之后)。

答案 3 :(得分:0)

Ajax以异步方式运行。 JavaScript发出请求并在等待请求完成时继续执行其他代码。这意味着,当请求完成时,您无法依赖,如果 将完成。因此,所有依赖于ajax调用结果的工作必须在ajax回调中完成。你根本不能依赖于ajax回调中发生的任何事情,它会随时对回调之外的任何事情产生影响。