【问题标题】:Ajax POST works in safari, but not in other browsersAjax POST 在 safari 中有效,但在其他浏览器中无效
【发布时间】:2018-11-30 02:36:44
【问题描述】:

我有一个表单,它通过 ajax 脚本向一些 PHP 代码发布表单。奇怪的是,一切都在 Safari 中运行,但是一旦我在 Firefox 或 Chrome 中尝试它,ajax 调用会将所有内容都视为错误,尽管控制台没有显示任何错误。

    $('#newClearance').on("submit", function(e) {
    e.preventDefault();

    var formData = new FormData(this);

    $.ajax({
        method: 'POST',
        url: 'modules/avas/library/avas_functions.php?action=newClearance',
        data: formData,
        contentType: false,
        cache: false,
        processData: false,
        success: function (data, status) {
            $('#formModal').modal('hide');
            $.notify(data, {type: 'success'});
            $.get(window.location)
                .done(function (r) {
                    var newDom = $(r);
                    $('#clearanceList').replaceWith($('#clearanceList', newDom));
                });
        },
        error: function (data,status,error) {
            $.notify(error, {type: 'danger'});
        }
    });
});

如果我将 html 表单直接发布到 PHP 脚本,一切顺利,PHP 脚本返回成功。它适用于所有浏览器。

我真的找不到线索,尤其是同一个脚本,除了另一种形式,在所有浏览器中都可以正常工作。有人知道吗?

其他信息 需要注意的一点可能是表单和 jquery 被放置在一个模式中,正如您可能会从代码中注意到的那样。

【问题讨论】:

  • 在 Chrome Devtools 中转到网络选项卡,选择 XHR(用于 Ajax)然后提交您的表单以触发 Ajax 请求。您能在该选项卡上的呼叫列表中看到请求吗?它应该出现在那里,如果您在列表中选择请求,您将可以访问响应详细信息,请将它们发布在此处,以便我们为您提供更多帮助。
  • Firefox 中的响应:SyntaxError:JSON.parse:JSON 数据的第 1 行第 1 列的数据意外结束。 Cache-Control no-store, no-cache, must-reval…te, post-check=0, pre-check=0 Connection keep-alive Content-Type application/json Date Wed, 20 Jun 2018 21:51:59 GMT已过期 Thu, 19 Nov 1981 08:52:00 GMT Pragma no-cache Server nginx/1.13.2 Transfer-Encoding chunked X-Powered-By PHP/5.6.32
  • 和 Safari:响应 HTTP/1.1 200 OK 内容类型:application/json 编译指示:no-cache 日期:2018 年 6 月 20 日星期三 21:53:33 GMT 连接:keep-alive 服务器:nginx /1.13.2 X-Powered-By: PHP/5.6.32 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 传输编码:身份
  • 如消息所述,Firefox 中的 JSON 数据解析存在错误。你能把这次调用的请求数据粘贴到这里吗?
  • 好的,我想我离解决方案越来越近了。如果我正在查看 devtools 中的请求有效负载,它看起来像 PHP 脚本成功执行脚本所需的提交按钮的值在 Firefox 和 chrome 中丢失,而不是在 safari 中。

标签: javascript ajax google-chrome firefox safari


【解决方案1】:

您的服务器日志在收到请求时会显示什么内容?

【讨论】:

  • 没有抛出任何错误...不在 PHP 日志中,不在 MySQL 日志中。我刚刚尝试通过将数据变量记录到控制台来查看它的内容。在 firefox 中它记录 {"readyState":4,"responseText":"","status":200,"statusText":"OK"},在 safari 中它根据 PHP 脚本记录它应该记录的内容(类似于成功)。使用类似的脚本,情况并非如此!仍然考虑它是 PHP 代码中的东西,除了当我在没有 ajax 的情况下直接发布表单时,一切运行顺利并返回 JSON“成功数组”
  • 不不抱歉,您的 Apache2/Nginx 日志说什么?
  • Firefox: 127.0.0.1 - - [20/Jun/2018:23:39:13 +0200] "POST /modules/avas/library/avas_functions.php?action=newClearance HTTP/1.1" 200 5 "marlinspike:7889/?m=avas&s=voyage&voyage=2" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Firefox/60.0" Safari: 127.0.0.1 - - [20/Jun/2018:23:41:00 +0200] "POST /modules/avas/library/avas_functions.php?action=newClearance HTTP/1.1" 200 48 "marlinspike:7889/…" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/605.1.15 (KHTML , 像壁虎) 版本/11.1.1 Safari/605.1.15"
【解决方案2】:

部分解决方案似乎是表单的“提交”按钮,这是 PHP 脚本运行所必需的。我已经在 PHP 脚本中删除了这个条件,但仍然想知道为什么 firefox/chrome 不 POST 提交按钮而 safari 会。

【讨论】:

    猜你喜欢
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    相关资源
    最近更新 更多