2012-11-29 79 views
3

我正在关注w3schools上的PHP/AJAX教程,并且我在一行中遇到了一些障碍。每次我调用这个函数时,readystate总是未定义的。XMLHttpRequest ReadyState始终未定义

function showHint(str) { 
    if (str.length == 0) { 
     document.getElementById("txtHint").innerHTML = ""; 
      return; 
     } 

     var xmlhttp; 

     if (window.XMLHttpRequest) { 
      console.log("Using XMLHttpRequest"); 
      xmlhttp = new XMLHttpRequest(); 
     } 
     else { 
      console.log("Using ActiveXObject"); 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

     xmlhttp.open("GET", "gethint.php?q=" + str, true); 
     xmlhttp.send(); 

     xmlhttp.onreadystatechange = function() { 
     console.log(xmlhttp.readystate); 

     if (xmlhttp.readystate == 4 && xmlhttp.status == 200) { 
      console.log(xmlhttp.status); 
      document.getElementById("txtHint").innerHTML = xmlhttp.responseText; 
     } 
    } 
} 

如果我改变这一行:

if (xmlhttp.readystate == 4 && xmlhttp.status == 200) { ... 

这(通过错字):

if (xmlhttp.readystate = 4 && xmlhttp.status == 200) { ... 

然后,它的工作原理,但像 “奇迹发生在这里” 感觉那种要编写这样的代码。

+1

'xmlhttp.readystate = 4'(单等号,分配)分配'4'到'.readystate'属性和是取值为'4'的表达,这是一种'truthy'值并因此通过if检查。所以它可能是'if(true && xmlhttp.status == 200)'或者只是'if(xmlhttp.status == 200)' – Esailija

回答

13

JS区分大小写。您需要检查readyState属性,而不是readystate属性。

if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     console.log(xmlhttp.status); 
     document.getElementById("txtHint").innerHTML = xmlhttp.responseText; 
    } 
+4

另外,'readyState'不应该是'undefined'。它在创建对象时从零开始,因此获得“未定义”是错误的一个很好的标志。 –

+0

@PaulButcher当status是任何类似'404'的错误代码时,readyState返回'undefined'。 –