为啥这个 $.post() 在 iOS 上不起作用?

Posted

技术标签:

【中文标题】为啥这个 $.post() 在 iOS 上不起作用?【英文标题】:why doesn't this $.post() work on iOS?为什么这个 $.post() 在 iOS 上不起作用? 【发布时间】:2018-05-23 01:01:35 【问题描述】:

为什么以下表单在 ios 上不起作用?

它适用于 Chrome / android / Windows / Mac,但不适用于 iOS 上的 Safari / Chrome。我已将问题范围缩小到 jquery post 函数。

它通过了“e.preventDefault()”但从不发布数据(我有一个 php 脚本确认该帖子永远不会发送到服务器)。并且带有 alert() 的回调不会触发。

<form method="post" action="" id="wl_form">
<div class="form-group">
    <label for="first">First Name *</label>
    <input type="text" name="first" class="form-control" id="first">
</div>
<button name="submit" type="submit" id="submit" class="btn btn-default">Submit</button>
</form>

var form = document.getElementsByTagName('form')[0];

form.addEventListener('submit', doSubmit);

function doSubmit (e) 

    e.preventDefault();

    alert("ive made it this far");

    $.post("record.php",
    
        first: $("#first").val()
    ,
    function(data)
        console.log("submitting");
        alert("Success: " + data);
    );

    window.location.href = "nextpage.html";

【问题讨论】:

如果注释掉 window.location.href 行会怎样? 啊!而已。我将href移到回调中,现在一切都很好。谢谢!将其作为一个答案将其标记为正确。 【参考方案1】:

看起来您在发布 ajax 调用后立即执行重定向。如果您执行页面传输的速度足够快,则 ajax 请求将被取消,您的后端可能永远看不到它。

正如您从 cmets 中发现的,将重定向移动到成功回调中应该允许您完全执行 ajax 请求,然后执行重定向。

【讨论】:

每次我用“看起来像”开始回答这些问题时,我都觉得自己更像 Clippy。

以上是关于为啥这个 $.post() 在 iOS 上不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥此文本输入在 iOS 上不起作用?

为啥我的后退按钮在 iOS 7 上不起作用?

为啥远程推送通知在 iOS 10 上不起作用?

为啥 tailwind css 在 iPhone ios 设备上不起作用?

POST 请求在 IONIC 应用程序中的 iOS 设备上不起作用

为啥 href 在 iOS 上不起作用,而在包括 Mac 在内的任何其他设备上都可以正常工作?