2011-07-31 71 views
1

您好我如下已經得到了一個Ajax代碼:Ajax響應是錯誤的服務器上請求

$.ajax({ 
       type:"POST", 
       url: 'sample.php', 
       data:"data="+data, 
       success: function(server_response) { 
       $('.functions').ajaxComplete(function(event, request){ 

        if(server_response == 0) 
        { 
           showmsg('An email with instructions to reset password has been sent to your email address. Please check it.'); 
        } 
        else if(server_response == 1) 
        { 
           showmsg('Email address was not found in our database. Please enter a valid email address'); 
        } 
        else 
        { 
           showmsg('Some problem occured while sending you an email. Please try again.');          
        } 


           exit(); 
     }); 

代碼工作正常第一次。但是,如果我提交沒有頁面刷新的代碼,則會收到前一個響應。就像我第一次加載頁面一樣,並且我從sample.php得到的響應爲0,消息顯示正確。但是,如果我給一個沒有頁面刷新的ajax調用,並且我從sample.php得到響應爲1,則顯示以前的消息。無論我得到什麼輸出,我都會得到相同的消息,直到我刷新頁面。有什麼問題?代碼正常工作。

+0

您是否確定響應未被緩存?如果您不能確保請求不發送禁用緩存的標頭,請使用包含隨機值和/或時間的查詢參數進行請求。 –

+0

@Delan Azabani:如果請求包含隨機值的查詢,則會生成最後一個響應。我希望在顯示結果後清除該值 – Ken

+0

'server_response'應該是一個字符串,不是嗎? –

回答

2

您的響應正在被緩存,因此您需要阻止該問題。如果您使用jQuery,有三種廣泛使用的解決方案。

設置的jQuery(指示AJAX調用不緩存結果)

$(document).ready(function(){ 
    $.ajaxSetup({ 
     cache: false 
    }); 
}); 

隨機數學種子(添加到其使URL服務器認爲它是一個新的請求)

$.ajax({ 
    type:"POST", 
    url: 'sample.php?rnd=' + Math.random(), 
    data:"data="+data, 
    success: function(server_response) { 
    //... rest of the code  
}); 

使用當前時間戳作爲種子(除了使用當前時間戳之外,與以前相同)

$.ajax({ 
    type:"POST", 
    url: 'sample.php?rnd=' + Date().getTime(), 
    data:"data="+data, 
    success: function(server_response) { 
    //... rest of the code  
}); 

第一個選項是很好的情況下,在單個頁面上發出大量的ajax請求,而沒有實際的缺點。

第二個選項幾乎總是一個不錯的選擇。它也沒有特別的缺點。

第三個選項也很好,但對於每秒創建多個AJAX請求的頁面可能會很危險,因爲有時相同的時間戳可能用於兩個不同的請求,並且隨後的調用將接收緩存的數據。

編輯:如果沒有$(document).ready()存在一個可以結束</head> tag之前被添加到頭部的頁面上。

<head> 
    <!-- Whatever code already exists in the head section --> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
      $.ajaxSetup({ 
       cache: false 
      }); 
     }); 
    </script> 
</head> 
+0

嘿,男人,我恐怕把代碼放在哪裏,我使用第一個選項。你能編輯我的代碼嗎? – Ken

+0

如果你已經在你的頁面中有'$(document).ready()'的地方,那麼這是個好地方。如果不是簡單地將我即將添加到我的響應頭部分中的代碼。 – brezanac

+0

爲了記錄,'.ajaxSetup'內的任何內容也可以用作'.ajax'中的一次性內容。 – pimvdb

1

您是否確認後續請求實際上是在服務器端代碼中接收和處理的?這些情況下返回的服務器端代碼是什麼?那裏可能存在問題?

僅基於此描述,聽起來像響應正在被緩存。 $.ajax()可以選擇禁用緩存:cache: false。這會迫使jQuery代碼在每次瀏覽器緩存時都向服務器提交請求。

更多信息here

相關問題