2012-06-24 43 views
0

一起工作下面的javascript函數似乎只有在我有最後一個confirm()語句時才起作用,我最初在那裏爲了調試目的。當我把它拿出來,delete_row.php似乎並沒有運行。同時,也許作爲一個提示/側面說明,當我這樣做在那裏有確認聲明,它適用於除了野生動物園所有的瀏覽器...javascript&ajax只與confirm()

function deleterow(form) { 

    if (!confirm("Are you sure you want to delete?")) return false; 

    var queryString = "?ID="; 

    for (var i = 0; i < document.myForm.rows.length; i++) { 
     if (document.myForm.rows[i].checked) { 
      ID = document.myForm.rows[i].value; 
      ID = ID.slice(0, -1); 
      queryString += ID; 
      queryString += "-"; 
     } 
    } 
    queryString = queryString.slice(0, -1); 

    try{ 
     // Opera 8.0+, Firefox, Safari 
     ajaxRequest = new XMLHttpRequest(); 
    } catch (e){ 
     // Internet Explorer Browsers 
     try{ 
      ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try{ 
       ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e){ 
       // Something went wrong 
       alert("Your browser broke!"); 
       return false; 
      } 
     } 
    } 

    var ajaxRequest; // The variable that makes Ajax possible! 
    // Create a function that will receive data sent from the server 
    ajaxRequest.onreadystatechange = function(){ 
     if(ajaxRequest.readyState == 4){ 
      var ajaxDisplay = document.getElementById('ajaxDiv'); 
      ajaxDisplay.innerHTML = ajaxRequest.responseText; 
     } 
    } 

    ajaxRequest.open("GET", "delete_row.php" + queryString, true); 
    ajaxRequest.send(null); 
    confirm('Delete successful!'); 
} 

UPDATE解決

我是通過以下js腳本更改檢查ajaxRequest的狀態

ajaxRequest.onreadystatechange = function(){ // Create a function that will receive data sent from the server 
    if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200){ 
     var ajaxDisplay = document.getElementById('ajaxDiv'); 
     ajaxDisplay.innerHTML = ajaxRequest.responseText; 
    } 
    else{ 
     alert('An error has occurred making the request'); 
     return false; 
    } 
} 

並且注意到我從服務器獲得狀態0。一些Google搜索幫助我意識到錯誤在於我如何定義調用這些函數的按鈕。

原來的代碼是:

<div style='float:left; margin-right:10px;'><input type="submit" onClick="deleterow(document.myForm)" VALUE="Delete ROWs"></div> 

解決方法是:

<div style='float:left; margin-right:10px;'><input type="button" onClick="deleterow(document.myForm)" VALUE="Delete ROWs"></div> 

(提交類型已被改爲按鈕式)

+0

爲什麼你的報價逃脫? –

+1

最後還有一個'}':/' –

+0

AJAX是異步的,你知道。 'confirm()'調用通常會在收到對HTTP請求的響應之前發生。 – Pointy

回答

1

delete_row.php doesn't seem to run你驗證了這一點,你可以將警報添加到if(ajaxRequest.readyState == 4){我想你的JS雖然沒有形式的東西,它似乎做工精細,http://jsfiddle.net/6gjy6/你得到在谷歌鉻合金控制檯任何JS錯誤?您是否嘗試過在瀏覽器上使用基本的「GET」請求進行訪問,例如delete_row.php" + queryString,,並查看服務器如何響應而不是AJAX調用。

試試這個:

var queryString = "?ID="; 

for (var i = 0; i < document.myForm.rows.length; i++) { 
    if (document.myForm.rows[i].checked) { 
     ID = document.myForm.rows[i].value; 
     ID = ID.slice(0, -1); 
     queryString += ID; 
     queryString += "-"; 
    } 
} 
queryString = queryString.slice(0, -1); 
var ajaxRequest; 

try{ 
    // Opera 8.0+, Firefox, Safari 
    ajaxRequest = new XMLHttpRequest(); 
} catch (e){ 
    // Internet Explorer Browsers 
    try{ 
     ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (e) { 
     try{ 
      ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (e){ 
      // Something went wrong 
      alert("Your browser broke!"); 
      return false; 
     } 
    } 
} 

// Create a function that will receive data sent from the server 
ajaxRequest.onreadystatechange = function(){ 
    if(ajaxRequest.readyState == 4){ 
     alert("received: " + ajaxRequest.responseText); 
     var ajaxDisplay = document.getElementById('ajaxDiv'); 
     ajaxDisplay.innerHTML = ajaxRequest.responseText; 
    } 
} 

ajaxRequest.open("GET", "delete_row.php" + queryString, true); 
ajaxRequest.send(null); 

+0

我沒有收到任何JS錯誤在Google Chrome的控制檯中...... 我該如何做一個基本的「GET」?恐怕我對js不是很熟悉(因此我問這個問題),我寫的代碼通過在線研究一起被黑客攻擊。我感謝您的幫助! – Constantino

+0

@ user1153897我的意思是在您的瀏覽器上定期嘗試URL,您只需輸入'http://localhost/delete_row.php?ID=123012-123-1'或其他內容即可查看服務器如何響應。 –

+0

我試過http://localhost/delete_row.php?ID = 123,它工作正常。我試過你的編輯,但它不能解決我的問題。也許作爲更多的信息進入問題,我有另一個js函數完全相同,但調用call_sheet.php來代替。它會輸出一行html和一個鏈接。當被調用時,我看到這行html很快出現,然後消失。有什麼想法嗎? – Constantino

0

讓你確認()語句存在,而在你的js頂部放

window.alert = null ; 

,並嘗試

ķ讓我查

+0

這有什麼幫助? –

+0

nope,似乎沒有解決它 – Constantino

0

我相當肯定你應該打電話open後設置onreadystatechange事件,否則處理程序被清除。

+0

我把ajaxRequest.open調用移動到ajaxRequest.onreadystatechange的上方(這是你的意思?),它沒有解決問題 – Constantino