2009-04-15 48 views
9

我試圖讓這個函數起作用,它請求參數url然後發送responseText到callback這是一個函數。Ajax不會過去readyState 1,爲什麼?

它似乎只得到readyState 1(感謝Firebug命令)。

這就是:

function Request(url, callback){ 
if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
    httpRequest = new XMLHttpRequest(); 
} else if (window.ActiveXObject) { // IE 
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
} else{ 
    return false; 
} 
httpRequest.onreadystatechange = function(){ 
    console.log(httpRequest.readyState); 
    if (httpRequest.readyState == 4) { 
     callback(httpRequest.responseText); 
    } 
}; 
console.log(httpRequest, url); 
httpRequest.open('GET', url, true); 
httpRequest.send(null); 
} 
+0

嗨,喬,我很感興趣你的解決方案是什麼?你找到了嗎?我對這個問題的解決方法是分配onload事件而不是onreadystatechange(請參閱下面的答案中的詳細信息)。 – 2009-06-08 06:17:04

+0

我不知道....對不起,我一直沒有在網站上。以及它的工作,但我只是切換到jQuery,它的工作正常。 – kennyisaheadbanger 2009-07-11 13:47:12

回答

3

我workarounded這個問題的onreadystatechange的分配onload事件,而不是:

function Request(url, callback){ 
if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
    httpRequest = new XMLHttpRequest(); 
} else if (window.ActiveXObject) { // IE 
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
} else{ 
     return false; 
} 

var readyStateChange = function(){ 
    console.log(httpRequest.readyState); 

    if (httpRequest.readyState == 4) { 
       callback(httpRequest.responseText); 
    } 
}; 


if (isFirefox && firefoxVersion > 3) { 
    httpRequest.onload = readyStateChange; 
} else { 
    httpRequest.onreadystatechange = readyStateChange; 
} 

console.log(httpRequest, url); 
httpRequest.open('GET', url, true); 
httpRequest.send(null); 
} 
1

可能Ajax請求不返回數據(所以,某種形式的服務器端錯誤)。嘗試啓用螢火蟲控制檯中的'顯示XMLHttpRequests'選項,以檢查這一點。

+0

嗯,它已經打開,我登錄http對象,並檢查它給我readyState 4,但事件沒有被調用。還頁面正常返回數據 – kennyisaheadbanger 2009-04-15 13:27:24

2

通過直接在瀏覽器中訪問它,檢查相關URL是否實際響應。

用不同的瀏覽器測試你會得到相同的結果。

使用某種形式的HTTP監視器到客戶端收看到服務器會話(我最喜歡的是Fiddler

0

我也面臨着同樣的問題。通過閱讀下面的網址,我解決了我的問題。

http://bytes.com/topic/javascript/answers/548442-ajax-readystate-1-wall

基本上,當我指定我作爲事件偵聽器httpRequest.onreadystatechange,我不能將任何變量傳遞給它。所以我必須將HTTP POST字符串中的變量嵌入到服務器後端,然後從HTTP響應中取回它。

它適用於FF 3.無需使用jQuery。