2012-12-04 56 views
0

首先,我沉迷於jQuery,但我想創建一些無框架和儘可能輕量級的東西,這樣我就可以自己動手了。ajax在頁面加載時被調用4次

我有這樣的代碼:

function ajax(url) 
{ 
var xmlhttp; 
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) 
    { 
     console.log(xmlhttp.responseText); 
    } 
    else 
     console.log("error"); 
    } 
xmlhttp.open("GET",url,true); 
xmlhttp.send(); 
} 

,我用我的頭再次呼籲:

ajax("url"); 

但是,我看到在我的控制檯3「錯誤」日誌和第四是rsponseText 。

任何人都知道爲什麼會發生這種情況,我該如何避免它?我在我的頁面中有其他腳本。

+1

沒有什麼錯在這裏。你看到3個'錯誤'日誌,因爲onreadystatechange在你的請求完成前觸發3次...如果你想讓它們停止移除:else {console.log(「error」);} – urbananimal

回答

0
xmlhttp.onreadystatechange=function() 

此回調使用超過4的readyState和200嘗試增加xmlhttp.status到您的錯誤消息,例如

function ajax(url) 
{ 
var xmlhttp; 
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) 
    { 
     console.log(xmlhttp.responseText); 
    } 
    else 
     console.log("error - readyState: "+xmlhttp.readyState); 
    } 
xmlhttp.open("GET",url,true); 
xmlhttp.send(); 
} 

ajax(url)不叫一次以上,但xmlhttp.onreadystatechange是。

0

它是不是一個錯誤,也這是不是你所看到的錯誤是onready statechange事件並始終登錄到else塊。 httpObject中不僅有成功和失敗的狀態。

請檢查here

正如你可以看到有4個狀態,只有xmlhttp.readyState==4 && xmlhttp.status==200意味着實際成功,要求完整,也沒有服務器錯誤。

0

這是因爲readyState將從1移動到4 int(在其他瀏覽器中較小)。

嘗試:

xmlhttp.onreadystatechange=function(){ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    console.log(xmlhttp.responseText); 
    else if(xmlhttp.readyState==4) 
     console.log("error"); 
}