.js文件中的变量不会保留AJAX的值

时间:2013-11-12 03:32:39

标签: javascript ajax variables

变量'output'未保持其值

function send()
{
var output;
var xmlhttp;
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }
else
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    output = xmlhttp.responseText;

此输出显示“hello world”

alert(output);
    }
  }
xmlhttp.open("GET",'mp.php',true);
xmlhttp.send();

此输出显示“未定义”:

alert(output);
return output
}

当导航到浏览器

时,mp.php的内容显示“Hello world”

返回时如何使输出变量不是'Undefined'?

2 个答案:

答案 0 :(得分:2)

Ajax调用是异步的。您的代码流程如下:

xmlhttp.send(); // async, so program flow will continue
alert(output); // this happened BEFORE the ajax call returned, so it is undefined here.

更好的方法是在ajax调用完成时使用回调。回调可以执行从ajax调用返回的值所需的任何操作。

在相关的说明中,您可能会发现使用jquery更容易。您可以将其简化为

$.get('myurl',{
  success: function(res) { // do success function }
});

答案 1 :(得分:0)

Theres没有回头。委托(.onreadystatechange = function())用完了你的函数(send())。有三种方法:a)定义全局变量输出并使用它; b)同步运行xttpRequest(没有事件和事件处理); c)更改代码的结构以处理成功事件。