2010-12-07 148 views
1

我正在開發ajax調用的應用程序,並且我遇到了一些相當特殊的行爲,有時當ajax調用被觸發時,它會自我複製,第二個完成但我沒有響應回來和原來的一直持續加載這是固定的時候再次發起ajax調用或當我刷新。jquery ajax調用響應永不返回

問題是我不能再現這種行爲,因爲它發生隨機。大多數情況下,當選項卡處於打開狀態時,我處於不同的選項卡或程序中。

我注意到使用螢火蟲的唯一情況是響應標題似乎有些問題。

相比成功的通話,他們是在一個不同的順序和一些信息完全丟失。 Content-Type總是比我在$.ajaxSetup中定義的text/html更多。

$.ajaxSetup({ 
    dataType:'html', 
    cache:false, 
    type:'POST', 
    timeout:15000, 
    error:function() { 
    alert('Action aborted please try again'); 
    }, 
    complete:function(XMLHttpRequest,textStatus){ 
    //console.log('XMLHttpRequest.readyState : '+XMLHttpRequest.readyState+'\nXMLHttpRequest.statusText : '+XMLHttpRequest.statusText+'\nXMLHttpRequest.status : '+XMLHttpRequest.status+'\ntextStatus : '+textStatus); 
    } 
}); 

和我的Ajax調用的一個例子:

var dataString = 'value='+value+'&value1='+value1+'&value2='+value2; 
    $.ajax({ 
    url:'file.php', 
    data:dataString, 
    success:function(resp){ 
     alert(resp); 

    } 
    }) 

這種行爲往往發生了很多我添加了一個dataType,也是一個winXP的SP3本地機器上查看時它正在發生更加頻繁之前使用XAMPP,我認爲既Firefox和IE。

我已經在運行Windows Server 2008和Apache和PHP獨立版的服務器上進行了測試,而不是xampp,這種情況發生得更少。 形成我的家用電腦它幾乎從來沒有發生上述測試是在我的辦公室電腦。

有沒有人遇到過類似的行爲類型,或者有沒有辦法以不同的方式編寫我的ajax調用。

我想避免使用插件和長時間輪詢在apache服務器上似乎有點沉重。

回答

0

你使用jquery ajax調用的方式在技術上是正確的。我會建議的一個建議是不要像手動那樣手動構建數據字符串。您可以將對象文字傳遞給數據參數,並讓jquery爲您進行字符串轉換。這有一個讓jquery執行正確轉義的附加好處,有時候會混淆XMLHttpRequest 除此之外,我建議使用firebug的console.trace()命令來查看是否實際進行了兩個.ajax調用以及爲什麼。有一個'beforeSend'偵聽器,你可以在你的ajaxSetup中設置 - 可能是一個放置它的好地方。

0

你的意思是這樣的:

var dataString= { 
    value: value, 
    value1: value1 
}; 

我幾乎可以肯定確保只有一次一個呼叫火災,但隨後如果花費的時間太長,複製自身並繼續加載,直到永遠。

我從螢火蟲附截圖:

Firebug

+0

這就像原來的請求無法完成,而是即時得到這是從來沒有實際請求的響應 – alex 2010-12-07 12:54:43