Javascript - return(xmlhttp.responseText)不起作用

时间:2012-03-15 01:06:06

标签: javascript xml

有人可以告诉我为什么这不起作用? 出于某种原因,我需要更多的文本来代替这些代码...不能真正看到这对任何人都有什么好处,但不管有什么更多的文字......

这:

if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)

    {
        alert("rS4Xs200");
    var string33 = xmlhttp.responseText;
    //document.write(xmlhttp.responseText);
            return(string33);

    }
  }
  var urlToGet = 'd2/two.php';
  alert(urlToGet);
xmlhttp.open("GET",urlToGet,true);
xmlhttp.send();

}

返回:

undefined

1 个答案:

答案 0 :(得分:0)

它显示“未定义”的原因是因为AJAX请求是异步的,因此您的脚本调用AJAXrequestDLC()函数并最终发送xmlHttpp请求,然后在onreadystatechange之前继续执行包含该函数调用的write命令函数被触发(因为尚未返回响应)。您可以通过将代码更改为以下内容来验证这一点:

function runAJAX2() {
var result = AJAXrequestDLC();
alert('boom');
document.write(result);
}

您会注意到代码中onreadystatechange函数中的警报发出“繁荣”警报,表示脚本在等待PHP文件的响应时已继续运行。

编辑:重复两次这个答案,我仍然有点困惑,所以这里有另一种解释:

  1. 函数runAJAX()被称为
  2. 文件撰写(AJAXrequestDLC());调用AJAXrequestDLC()函数
  3. 在AJAXrequestDLC函数中,发送xmlHTTP请求
  4. 此时程序流程返回到document.write命令,该命令写入AJAXrequestDLC()的当前值(未定义)。
  5. 在几微秒后的某个时间,响应从php脚本返回,并且xmlhttp.onreadystatechange事件触发,调用内联函数。但是,由于程序流已经移动,因此return语句无效。