来自某个函数的$ .post不会仅在iPhone

时间:2018-06-11 10:39:27

标签: jquery html ajax forms

下面的代码在台式机和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上完美运行

1 个答案:

答案 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在内的所有平台上完美运行。

Malsup Jquery Forms Plugin