2011-03-31 289 views
1

例URL:http://twitter.realgamingreview.com/index.phpAJAX發送請求兩次

編輯:忘了提:使用測試符號中:測試/檢驗用戶名/密碼。

我正在嘗試做一個簡單的AJAX請求來從數據庫中檢索一些數據。目標文件serverTime.php似乎正在完美運行;它插入所需的數據並返回所需的responseText。

但是,該請求似乎是兩次觸發。當我使用Firebug瀏覽JavaScript時,這很清楚。這會導致頁面「重置」(不完全確定),從而導致我的光標從當前文本框中失去焦點,這是一個新問題。即使我的郵件實際上不是空的,URL也會說「localhost/twitter/index.php?message =」。在重大事件發生之前,我想解決這個相當小的問題。

JavaScript代碼如下。 ajaxRequest是我的XMLHTTPRequest對象。任何幫助表示讚賞!

//Create a function that will receive data sent form the server 
ajaxRequest.onreadystatechange = function(){ 
    if (ajaxRequest.readyState == 4){ 
     document.getElementById('output').innerHTML = ajaxRequest.responseText; 
    } 
} 
// build query string 
var message = document.myForm.message.value; 
var queryString = "message=" + message; 

    //send AJAX request 
    ajaxRequest.open("GET", "serverTime.php" + "?" + queryString, true); 

    ajaxRequest.send(null); 

感謝,

模範

+0

您能否包含一個URL,以便我們可以分析發生的情況? – 2011-03-31 02:08:12

+0

它在本地機器上,但我會看看我能做些什麼。 – Paragon 2011-03-31 03:00:17

+0

示例網址:http://twitter.realgamingreview.com/index.php – Paragon 2011-03-31 03:13:36

回答

1

我的問題與AJAX完全無關。相反,這是一個簡單的(但很隱晦的)問題,在我的表單中有兩個文本框,我能夠進入並且沒有頁面重新加載,但是隻有一個,頁面會由於某種原因而重新加載。

我已經改變了我的事件系統,使得我不依賴於那些不可靠的東西(現在使用jQuery來監聽特定文本框的Enter鍵)。

感謝那些花時間回答我錯誤的問題的人。

3

我見過很多次,對我來說一直是螢火蟲。嘗試關閉螢火蟲並再次提交請求。使用小提琴手或其他方式來驗證只執行一次的請求。

+0

我不認爲它可以是Firebug。它也發生在Google Chrome上。如果您想親自看看,請訪問網站並以測試/測試身份登錄。隨意發佈。 – Paragon 2011-03-31 03:28:44

0

當我在Javascript中編寫AJAX函數時,通常會保留一個狀態變量,以防止當前正在進行的新請求被分派。如果您只是想忽略在另一個完成之前完成的請求,則可以執行下列操作:

  1. 將inProgress初始化爲false。
  2. 在調用ajaxRequest.send()之前將inProgress設置爲true。除非inProgress爲false,否則不要調用ajaxRequest.send()。
  3. ajaxRequest.onreadystatechange()設置INPROGRESS爲假時的狀態爲4

在某些情況下,但是,你想隊列中的動作。如果是這種情況,那麼當inProgress爲true時,您不能忽略對ajaxRequest.send()的請求。以下是我爲這些情況推薦的內容:

  1. 將ajaxQueue初始化爲空的全局數組。
  2. 在調用ajaxRequest.send()之前,將請求推送到ajaxQueue。
  3. 在ajaxRequest.onreadystatechange()狀態爲4時,彈出數組刪除請求只是服務。然後,如果ajaxQueue不是空的(array.size> 0),再次彈出並調用send()返回的對象。