下面的代码在台式机和Android手机上完美运行,但在使用safari或chrome的iPhone上,beforesend功能成功触发,表单成功发布到服务器但成功函数永远不会触发。
从点击按钮调用SubmitForm。我也尝试使用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.此请求包括FormData 2.单击按钮从模态窗口调用该函数。
我有来自cshtml页面的$ .post请求没有表单数据,它们在iPhone上完美运行。 我也有从模式窗口发布的ajax.beginform请求,这些请求也可以在iPhone上完美运行
答案 0 :(得分:0)
问题是,根据Mozilla网站上的兼容性表,Mobile Safari可能不支持FormData。 (兼容性未知)。
FormData documentation on Mozilla
然后的解决方案是通过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在内的所有平台上完美运行。