2012-07-01 299 views
0

我的Mac上有一個帳戶數據庫,使用HTML,Javascript & PHP在我單擊刪除按鈕後刪除一個帳戶。它每次都在FireFox中工作,並且每次都在Safari中失敗(失敗意味着刪除請求被完全忽略)。XMLHttpRequest適用於FireFox,不適用於Safari

從本質上講,這是我的代碼做什麼...

  1. 按鈕onclick表格內調用JS FUNC verifyDelete()要我驗證自己的選擇刪除
  2. 接下來,onsubmit從相同的形式調用JS FUNC delAccount()
  3. 最後,delAccount()使用XMLHttpRequest調用PHP頁面刪除 帳戶

我想到了使用XMLHttpRequest來看待AJAX​​。我並不需要AJAX使用的所有ReadyState,Response等,所以我只是使用了我需要的東西。按照我在delAccount()函數中執行的操作是否合法?也許這就是爲什麼Safari會失敗?

任何幫助表示讚賞,這裏是我的代碼...

文件 - View.php

<?php 
    // some code 
?> 
     <form method="get" onsubmit="return delAccount('<?php echo $acctNum; ?>')"> 
      <input type="hidden" name="acctName" value="Blah」 /> 
      <button onclick="return verifyDelete()" >Delete</button> 
     </form> 
<?php 
    // some code 
?> 

文件 - common.js

function verifyDelete() { 
    var r=confirm("Are you sure you want to Delete this?\r\n\n" + 
     "A) 'Cancel' delete request\r\n" + 
     "B) 'OK', delete\r\n"); 
    if (r == false) { 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

function delAccount (acctNum) { 
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
     var xmlDelete = new XMLHttpRequest(); 
    } 
    xmlDelete.open("GET", "delAcct.php?q=" + acctNum, true); 
    xmlDelete.send(null); 
    return false; 
} 

文件 - delAcct.php

<?php 
    // code to delete account 
?> 
+1

爲什麼要使用一些像jQuery一樣的JavaScript庫?這些庫建立在記住這些crossbrowsers問題的同時,也使得您的javascript代碼易於編寫和管理.-- btw您是否在Safari瀏覽器中看到任何javascript錯誤?嘗試在delAccount方法中提醒acctNum,並參閱 – Kishore

+0

我被告知,在學習jquery之前最好熟悉javascript。情況並非如此嗎? – JonDoeCA

+0

我已經在整個地方使用過警報,並沒有發現任何它不應該做的事 - 包括遍歷'if'語句,所以我知道php被調用。 – JonDoeCA

回答

-1

我忽略了一些東西。我只是需要交換truefalseXMLHttpRequest ...

xmlDelete.open("GET", "delAcct.php?q=" + acctNum, false); 

我得到它使事件同步的,但我真的不知道爲什麼這個工作和其他的沒有。

1

您沒有取消發送表單,所以在AJAX請求發送之前,可能發生表單get被提交(什麼會卸載當前頁面)。

修改的delAccount()電話:

<form method="get" onsubmit="return delAccount('<?php echo $acctNum; ?>')"> 

,這增加的delAccount()

return false; 

到底...是什麼將避免形式發送

還有什麼:當使用GET時,發送方法需要null作爲參數

+0

用你的建議更新我的代碼/問題。 – JonDoeCA

+0

我在'xmlDelete.send();'之後添加了返回'false;'併爲send參數添加了null,但它仍然無效。我認爲你在正確的軌道上,我剛剛告訴Kishore我可以通過消除'verifyDelete()'函數來實現'刪除'。但是,我需要「你確定嗎?」警惕,所以它不是一個修復,只是我把它刪除。也許是時機問題? – JonDoeCA

+1

您是否還更新了表單內的delAccount調用(** return **非常重要)? –

相關問題