【问题标题】:XMLHttpRequest Works In FireFox, Not SafariXMLHttpRequest 在 FireFox 中工作,而不是 Safari
【发布时间】:2015-01-03 04:44:44
【问题描述】:

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

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

  1. Form 内的按钮 onclick 调用 js func verifyDelete() 要求我验证我的删除选择
  2. 接下来,来自同一表单的onsubmit 调用一个js func delAccount()
  3. 最后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
?>

【问题讨论】:

  • 为什么你不使用像 jQuery 这样的 JavaScript 库?这些库的构建考虑了这些跨浏览器问题,并且还使您的 javascript 代码易于编写和管理。--顺便说一句,您在 safari 中看到任何 javascript 错误吗?尝试在您的 delAccount 方法中提醒 acctNum 并查看
  • 有人告诉我,在学习jquery之前最好先熟悉javascript。不是这样吗?
  • 我在各处都使用了警报,但没有发现任何不应该做的事情 - 包括遍历 if 语句,所以我知道正在调用 php。
  • 对于这样的事情,我建议使用某种 javascript 库,这将使您的生活变得轻松。
  • 告诉你熟悉javascript的人是对的。但是 javascript 作为一种语言,而不是跨浏览器开发的噩梦,这对您毫无帮助。做一些算法来学习第一部分,当你来玩 DOM 或 AJAX 时就拿 JQuery。

标签: php javascript html xmlhttprequest


【解决方案1】:

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

修改delAccount()的调用:

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

并将其添加到delAccount() 的末尾

return false;

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

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

【讨论】:

  • 我在xmlDelete.send(); 之后添加了返回false; 并为发送参数添加了null,但它仍然不起作用。不过,我认为您走在正确的轨道上,我刚刚告诉 Kishore 我可以通过消除 verifyDelete() 函数来“删除”它。但是,我需要“你确定吗?”警报所以这不是修复,只是我把它删除了。也许是时间问题?
  • 你是否也更新了表单内部对delAccount的调用(return很重要)?
  • 解决此问题的方法是在 xmlDelete.open() 请求中将 true 更改为 false。我按照您的建议添加了对这个问题的返回和我的代码,感谢所有输入;我的代码现在更准确、更完整了!
【解决方案2】:

我忽略了一些东西。我只需要将truefalse 交换为XMLHttpRequest...

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多