document.form.submit () слишком медленный для завершения до window.close () - PullRequest
0 голосов
/ 02 ноября 2018

У меня проблема с сохранением формы. Сама форма имеет около 40 строк и около 12 входов для каждой строки в этом стиле: Sorting Rules Image

При сохранении следует POST, а затем закрыть окно. Тем не менее, это никогда не спасает. Это заставляет меня думать, что оно закрывает окно, прежде чем оно сохраняет. Вот код вопроса:

 $('#save-btn').click(function() {
    document.form.submit(); 
    window.close();
 };

Если я удаляю window.close() и использую инспектор, чем я вижу в поле параметров, что все значения сохраняются правильно. Это снова заставляет меня думать, что окно закрывается рано.

Я попытался использовать следующую функцию #save-btn:

setTimeout('window.close()',5000)

И все же это никогда не выполняло window.close () через 5 секунд, и все вокруг кажется плохим программированием, заставляющим его ждать 5 секунд и затем закрываться, когда это может занять какое-то время.

Затем я попытался использовать запрос AJAX, например:

var _url = 'submit?nameParam="+nameParam+"&com=editlist&'+$('form').serialize();
console.log(_url); //just to see what its pushing out

$.ajax({
     url: _url,
     error: function(){
     alert('Error submitting form.');
     },

     success: function() {
     window.close();
     }
     });

Это привело к 414 Request-URI Too Long. Я знаю, дело в том, что это должно быть POST для начала, но я просто пытался заставить его работать.

Только потому, что наша форма настроена так:

<form name="form" action="submit" method="post">

Нашим решением было закрыть страницу со страницы действий

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Удалите сериализованные данные из _url и вместо этого передайте их через запрос .ajax () с параметром data:

var _url = 'submit?nameParam="+nameParam+"&com=editlist';

$.ajax({
    url: _url,
    method: "POST",
    data: $('form').serialize(),
    error: function() {
        alert('Error submitting form.');
    },
    success: function() {
        window.close();
    }
});
0 голосов
/ 02 ноября 2018

Ваш подход ajax правильный, потому что вы можете понять, что отправка формы выполнена правильно с кодом, в случае успешного завершения окно легко закрыть.

Для отправки запроса POST необходимо внести небольшие изменения в код ...

  • Не сериализуйте свою форму и не добавляйте URL, это небезопасно (не работает для вашей ситуации).
  • Публикуйте ваши значения как "данные публикации".

Вот документация об этом.

https://api.jquery.com/jquery.post/

Пожалуйста, попробуйте обновить ваш вопрос, если вы не можете понять, как.

...