2012-07-01 259 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 **非常重要)? –

相关问题