1

我的 Mac 上有一个帐户数据库,在单击删除按钮后使用 HTML、Javascript 和 PHP 删除帐户。它在 FireFox 中每次都有效,在 Safari 中每次都失败(失败意味着删除请求被完全忽略)。

本质上,这就是我的代码正在做的事情......

  1. 表单内的按钮onclick调用一个 js 函数verifyDelete(),要求我验证我选择删除
  2. 接下来,onsubmitfrom同一个表单调用一个js funcdelAccount()
  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
?>
4

2 回答 2

1

您没有取消表单的发送,因此可能会在发送 AJAX 请求之前提交表单(将卸载当前页面)。

修改调用delAccount()

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

并将其添加到末尾delAccount()

return false;

...什么可以避免发送表格

还有什么:使用 GET 时,发送方法需要null作为参数

于 2012-07-01T01:52:19.313 回答
-1

我忽略了一些东西。我只需要换成true...falseXMLHttpRequest

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

我知道它使事件同步,但我真的不知道为什么这个工作而另一个没有。

于 2012-07-01T03:27:44.107 回答