来自函数的 $.post 不会仅在 iPhone 上调用成功函数



下面的代码在台式机和安卓手机上完美运行,但在使用 safari 或 chrome 的 iPhone 上,beforesend 函数成功触发,表单成功发布到服务器,但成功函数永远不会触发。

提交表单是通过单击按钮调用的。我还尝试使用JQuery附加事件侦听器,它执行完全相同的操作。

function SubmitForm() {
var formdata = new FormData($('form').get(0));
$.post({
url: raisePostUrl,
data: formdata,
processData: false,
contentType: false,
beforeSend: function (xhr) {
AddCog('SubmitBtnO', ' Processing...');
},
error: function (xhr, status, error) {
RestoreElementShowAlert('SubmitBtnO', 'Submit', 'MsgDiv', xhr);
},
success: function (result, status, xhr) {
ActionSuccess(result);
},
});
}
function ActionSuccess(data) {
HideModal();
$('#AlertDiv').html(data);
showAlert();
}

编辑:只是想补充一点,其他 $.post ajax 请求正在 iPhone 上运行,此请求与正在工作的请求之间的区别是: 1. 此请求包括表单数据 2. 单击按钮时从模态窗口调用该函数。

我有 $.post 请求,这些请求是从没有表单数据的 cshtml 页面调用的,它们在 iPhone 上完美运行。 我也有从模态窗口发布的ajax.beginform请求,这些请求在iPhone上也可以完美运行。

问题是,根据Mozilla网站上的兼容性表,Mobile Safari可能不支持FormData。(兼容性未知(。

FormMozilla 上的 FormData 文档

然后,解决方案是通过malsup JQuery Forms插件使用iframe回退,如下所示:

var options = {
type: "POST",
url: raisePostUrl,
beforeSend: function (xhr) {
AddCog('SubmitBtnO', ' Processing...');
},
error: function (xhr, status, error) {
RestoreElementShowAlert('SubmitBtnO', 'Submit', 'MsgDiv', xhr);
},
success: function (result, status, xhr) {
ActionSuccess(result);
}
};
// pass options to ajaxForm (malsup jquery.form.js)
$('#RaiseForm').ajaxForm(options);

它可以在包括iOS在内的所有平台上完美运行。

Malsup Jquery Forms 插件

最新更新