2012-03-15 105 views
0

有人能告诉我为什么这不起作用吗? 出于某种原因,我需要为这个数量的代码更多的文字......真的不能看到这可能有利于任何人,但不论有一些文字.....Javascript - return(xmlhttp.responseText)不能正常工作

此:

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 
+0

因为未定义xmlhttp.responseText。 – rlemon 2012-03-15 01:09:31

+0

发布您的全部xhr代码。并可能适用的服务器代码 – rlemon 2012-03-15 01:10:08

+0

好吧添加了功能 – King 2012-03-15 01:11:09

回答

0

它显示“未定义”的原因是因为AJAX请求是异步的,因此你的脚本调用AJAXrequestDLC()函数,并最终发送xmlHttpp请求,但它然后移动到写命令包含该功能呼叫bef矿的onreadystatechange函数被触发(因为响应尚未返回)。您可以通过更改您的代码以类似验证这一点:

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语句不起作用。
+0

在xmlresponse填充之前,我能否延迟脚本执行? – King 2012-03-15 16:42:34

+0

你可以但这样做的缺点是,如果由于某种原因,你的PHP脚本花了很长时间来回应你的脚本(和浏览器)会等待响应。但是,如果你想这样做,这是一个很好的解释:http://www.hunlock.com/blogs/Snippets:_Synchronous_AJAX – TheOx 2012-03-15 21:06:58

+0

它不是一个PHP脚本这是一个HTML页面:) ajax调用是所有它做的,所以我怀疑它可能需要很长的时间来回应 – King 2012-03-16 00:22:57