Javascript/Ajax(无jquery!)onReadyStateChange1

Javascript/Ajax(无jquery!)onReadyStateChange1,javascript,php,ajax,onreadystatechange,Javascript,Php,Ajax,Onreadystatechange,我正在编写一个简单的ajax函数: 1 function setXMLHttpRequest() { 2 var xhr = null; 3 if (window.XMLHttpRequest) { 4 xhr = new XMLHttpRequest(); 5 } 6 else if (window.ActiveXObject) { 7 xhr = new ActiveXObject("Microsoft.XMLHTTP"); 8

我正在编写一个简单的ajax函数:

1 function setXMLHttpRequest() {
2     var xhr = null;
3     if (window.XMLHttpRequest) {
4         xhr = new XMLHttpRequest();
5     }
6     else if (window.ActiveXObject) {
7         xhr = new ActiveXObject("Microsoft.XMLHTTP");
8     }
9     return xhr;
10 }
11
12
13 var xhrObj = setXMLHttpRequest();
14 function get_commenti(id)
15 {
16     var url = "get_commenti.php?id="+id;
17     xhrObj.open("GET", url, false);
18     xhrObj.onreadystatechange = add_commenti(id);
19     xhrObj.send(null);
20 }
21 
22 function add_commenti(id)
23 {
24     if(xhrObj.readyState == 4)
25     {
26         var id_div = "commento_"+id;
27         document.getElementById(id_div).innerHTML += xhrObj.responseText;
28     }
29     alert(xhrObj.readyState);
30 }
问题在于,第29行发出警报的readystatechange始终为1,而从不为4。 如果我使用浏览器访问页面,它会按预期打印结果(我还尝试放置一个绝对路径)

我已经尝试查找这个问题,但现在似乎每个人都在使用jQuery,而我还没有

可能值得注意的是,我在自己的web服务器上运行这个,所以可能是因为我配置了一些东西

谢谢

我使用
if(xhrObj.readyState==4&&xhrObj.status==200)
试试看,也许吧?

我使用
if(xhrObj.readyState==4&&xhrObj.status==200)
试试看,也许吧?

onreadystatechange
不应与同步请求一起使用。 只需在ajax请求之后立即使用响应

function get_commenti(id)
 {
     var url = "get_commenti.php?id="+id;
     xhrObj.open("GET", url, false);
     xhrObj.send(null);
     var id_div = "commento_"+id;
     document.getElementById(id_div).innerHTML += xhrObj.responseText;
 }

onreadystatechange
不应与同步请求一起使用。 只需在ajax请求之后立即使用响应

function get_commenti(id)
 {
     var url = "get_commenti.php?id="+id;
     xhrObj.open("GET", url, false);
     xhrObj.send(null);
     var id_div = "commento_"+id;
     document.getElementById(id_div).innerHTML += xhrObj.responseText;
 }

您没有分配函数

xhrObj.onreadystatechange = add_commenti(id);
你在叫它

你需要使用闭包

xhrObj.onreadystatechange = function() { add_commenti(id); };

您没有分配函数

xhrObj.onreadystatechange = add_commenti(id);
你在叫它

你需要使用闭包

xhrObj.onreadystatechange = function() { add_commenti(id); };

你在哪里调用你的函数?你在哪个浏览器中?看这个:尝试改变这个
xhrObj.onreadystatechange=add_commenti(id)
with
xhrObj.onreadystatechange=add_commenti
您在哪里调用函数?您在哪个浏览器中?请参见:尝试更改此
xhrObj.onreadystatechange=add_commenti(id)