$ .post из функции не вызывает функцию успеха только на iPhone - PullRequest
0 голосов
/ 11 июня 2018

Приведенный ниже код отлично работает на настольных компьютерах и телефонах Android, но на iPhone, использующем либо Safari, либо Chrome, функция beforesend успешно срабатывает, форма успешно отправляется на сервер, но функция success никогда не срабатывает.

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. Функция вызывается из модального окна при нажатии кнопки.

У меня есть запросы $ .post, которые вызываются со страницы cshtml без данных формы, и они отлично работают на iPhone.У меня также есть запросы ajax.beginform, отправленные из модальных окон, которые также отлично работают на iPhone

1 Ответ

0 голосов
/ 21 июня 2018

Проблема в том, что Mobile Safari может не поддерживать FormData в соответствии с таблицей совместимости на сайте Mozilla.(Совместимость неизвестна).

Документация FormData для Mozilla

Решение состоит в том, чтобы использовать резервные копии iframe через плагин JQuery Forms malsup, как показано ниже:

        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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...