2010-04-23 86 views
3

我有一個非常簡單的AJAX和PHP代碼。通過AJAX調用PHP時,它將接收到的響應代碼設置爲0. PHP代碼已成功運行,但無法獲得響應。這個狀態'0'表示什麼,我該如何解決這個問題?接收AJAX HTTP響應代碼爲0

function confirmUser(id) 
{ 
    xmlhttp=GetXmlHttpObject(); 
    regid = id; 
    if (xmlhttp==null) { 
     alert ("Browser does not support HTTP Request"); 
     return; 
    } 
    var url="confirm.php"; 
    url=url+"?id="+id; 
    url=url+"&a=confirm"; 
    xmlhttp.onreadystatechange=function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      $("#txtHint" + regid).text("Awaiting confirmation"); 
     } else { 
      alert (xmlhttp.status); //this shows '0' 
     } 
    }; 
    xmlhttp.open("GET",url,true); 
    xmlhttp.send(null); 
} 

那麼,這是我使用的JavaScript。對不起,如果我應該補充更多的東西。同時告訴我我錯過了什麼。 我感謝你的幫助

GetXmlHttpObject功能:

function GetXmlHttpObject() 
{ 
    if (window.XMLHttpRequest) { 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     return new XMLHttpRequest(); 
    } 
    if (window.ActiveXObject) { 
     // code for IE6, IE5 
     return new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    return null; 
} 
+1

真的很難調試你看不到的代碼。告訴我們是什麼導致了錯誤。 – Quentin 2010-04-23 10:07:22

+0

請把你的代碼放在這裏,以便一個人能夠幫助你。 – Salil 2010-04-23 10:07:57

+0

我已經添加了代碼。只是我看到問題的一部分... – shyam 2010-04-23 10:32:11

回答

1

我知道人們可能不愛聽它,但這正是JS框架的用途。如果您只需通過jQuery進行簡單的AJAX調用,爲什麼會遇到各種瀏覽器傾向和自定義AJAX調用的災難。

基本上,你正在重新發明輪子,而且沒有理由。讓你的PHP返回JSON數據,並在成功代碼中嵌入一個變量,如果你需要測試的話。

<script src="jquery.js"></script> 
<script> 
    $.get("myphp.php", { id : "yes", blah : "stuff" }, function(data) { 
    if (data.success == 1) { 
    alert("got data"); 
    } else { 
    alert("didn't get data"); 
    } 
},"json"); 
</script> 

繁榮,你現在有了跨瀏覽器的AJAX。

+0

感謝您的回覆。我會嘗試一下。 – shyam 2010-04-24 06:54:07

+0

可以發佈一個鏈接,更詳細的使用ajax thru jquery嗎?將是真正有用的.. – shyam 2010-04-24 07:52:47

+0

其實我的例子是一個工作的例子。訪問http://www.jquery.com獲取更多示例,那裏有很多例子。我發佈的示例的基礎知識是$ .get()用於GET或$ .post()用於發佈請求。第一個參數是要加載的文件名,該文件的內容將填充定義的回調函數的數據變量。上面的例子是,如果返回文件將傳遞JSON,但是如果你忽略了「json」,那麼它將全部返回文檔的文本。 這是來自IBM的一個doc - http://www.ibm.com/developerworks/library/x-ajaxjquery.html。 – 2010-04-26 22:21:10

2

這裏有你readyState的代碼。

0. Uninitialized 
1. Set up, but not sent 
2. Sent 
3. In flight 
4. Complete 

(來源:http://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/AJAX-Ready-State-Codes/

你得到的0 readyState的不斷堅持?如果是這樣,這意味着你的請求沒有被髮送,雖然我可以在你的例子「xmlhttp.send(null)」中看到一行代碼... ...

我會預測你會得到一個0之前你打電話發送,但在那之後有一個不同的狀態碼。如果你稍等一下會發生什麼?

+1

那麼,我只有一次狀態爲0,即在最後;它應該是200. – shyam 2010-04-23 10:43:32

+0

你是在談論readyState還是Status?狀態應該是200,當請求完成時,readyState是4.我建議使用Firebug來跟蹤請求 - 它將幫助你診斷任何問題,因爲它會告訴你AJAX請求和任何對「Net 「 標籤。 – Fenton 2010-04-23 10:49:15

+0

我正在談論狀態。 readyState當然是4。 讓我試試螢火蟲。 – shyam 2010-04-23 10:52:52

0

如果您請求HTTPS資源並且握手失敗(例如無效證書),可能會發生這種情況。特別是,如果您使用瀏覽器外部的XML請求對象,則錯誤可能不明顯。