我的 Mac 上有一个帐户数据库,在单击删除按钮后,该数据库使用 HTML、Javascript 和 PHP 来删除帐户。每次在 FireFox 中都有效,而在 Safari 中每次都会失败(失败意味着删除请求被完全忽略)。
本质上,这就是我的代码正在做的事情......
- 表单内的按钮
onclick
调用js函数verifyDelete()
要求我验证我的删除选择 - 接下来,同一表单中的
onsubmit
调用 js 函数delAccount()
- 最后,
delAccount()
使用XMLHttpRequest
调用php页面来删除 帐户
我通过查看 AJAX 得到了使用 XMLHttpRequest
的想法。我不需要 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
?>
最佳答案
您没有取消表单的发送,因此可能会在发送 AJAX 请求之前提交表单(这将卸载当前页面)。
修改delAccount()
的调用:
<form method="get" onsubmit="return delAccount('<?php echo $acctNum; ?>')">
并将其添加到 delAccount()
的末尾
return false;
...什么可以避免发送表单
还有什么:使用 GET 时,发送方法需要 null
作为参数
关于php - XMLHttpRequest 适用于 FireFox,不适用于 Safari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11278838/