Ajax не отправляет значение текстовой области (CKEditor) с первой попытки, но отправляет его со второй попытки - PullRequest
0 голосов
/ 13 мая 2018

У меня есть текстовая область в моем HTML, которая загружает CKEditor 4. Затем я отправлю данные моей HTML-формы в файл PHP, который обрабатывает входные данные.

       $.ajax({
            xhr: function(){
                //blah blah blah
                return XHR;
            },
            type: "POST",
            url: "process.php",
            data: formData,
            processData: false,
            contentType: false,
            mimeType: "multipart/form-data",
            success: function (response) {
                //blah blah blah
            },
            error: function(XHR, textStatus, error){
               //blah blah blah
            }
        });

В файле PHP я сначала очищаю все входные данные, а затем передаю их в базу данных. Оказывается, что значение textarea на моей странице, которое называется «description», не отправляется через ajax при первом нажатии кнопки отправки (я подтвердил это, написав содержимое переменной $ _POST [] в файл на сервере, чтобы облегчить процесс отладки), но во второй раз, когда я нажимаю кнопку отправки в моей HTML-форме, значение описания textarea отправляется без проблем!

Сначала я предположил, что это может быть связано с тем, что значение описания textarea содержит HTML-коды и очищается с помощью PHP. Но я убрал санитарную вещь для этого, и проблема осталась. До сих пор я написал тысячи строк кода, но я не буду возражать, раскрывая больше кодов, если это будет необходимо. Я просто избегал этого, чтобы этот пост не стал слишком длинным.

Любая помощь приветствуется. Заранее спасибо.

Редактировать Вот так я заполняю переменную formData:

   $("#form").submit(function (event) {
        event.preventDefault();
        var formData = new FormData(this);
        loading_start();
        submitForm(formData);
    });

И мне нужно загружать файлы одновременно при отправке этой формы.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Я обнаружил проблему, вызывающую это странное поведение. Для дальнейшего использования CKEditor необходимо обновить, прежде чем вы сможете передать значение текстовой области, содержащей его данные. Чтобы заставить CKEditor обновлять себя, вы можете использовать следующий код:

   for(var instanceName in CKEDITOR.instances)
            CKEDITOR.instances[instanceName].updateElement();

Кредит за приведенный выше код переходит к пользователю, который его разместил здесь .

0 голосов
/ 13 мая 2018

Если вам не нужно загружать файлы на сервер, попробуйте использовать функцию .val() для получения содержимого textarea.

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