выполнение javascript после завершения отправки формы

Я пытаюсь отправить некоторые файлы в свою базу данных с помощью формы. Форма имеет цель скрытого iframe. Когда он закончит загрузку, я хотел показать сообщение.

 $("form#formPost").submit();
 customFunction();

этот пример, похоже, не заканчивает отправку перед запуском customFunction(), что очень плохо для того, что я проектировал.

есть ли способ сделать что-то, что будет срабатывать, когда он завершит отправку данных? Я смотрел вокруг на stackoverflow, и там arent много постов непосредственно об этом. Я чувствую, что мне придется идти в целевой iframe и выполнить код, когда он будет готов, и т. д. Есть ли способ сделать так, как я хочу?

варианты я пробовал:

 $("form#formPost").submit(function(){ customFunction(); });

3 ответов


коллега создал функцию, которая делает именно это.

function SubmitWithCallback(form, frame, successFunction) {
   var callback = function () {
       if(successFunction)
           successFunction();
       frame.unbind('load', callback);
   };

   frame.bind('load', callback);
   form.submit();
}

эта функция принимает форму, которую вы отправляете, целевую iframe форм и функцию anon, которая будет выполнена при успешном выполнении.


Если вы отправляете форму традиционным способом, вы по существу говорите: "Я закончил с этой страницей. Вот куча данных формы для вас, веб-сервер, чтобы отобразить мою следующую страницу". Веб-сервер принимает данные формы и возвращает браузеру следующую страницу.

Если вы не хотите перезагрузки страницы, вы можете отправить свою форму с помощью Ajax. Это довольно просто с jQuery:

http://api.jquery.com/jQuery.ajax/

Использование Ajax, у вас есть четко определенные события, когда отправка завершается, когда она успешна и когда она ошибается.

Я бы не рекомендовал подход таргетинга на скрытый iframe. Ajax лучше подходит для этого типа обработки.

обновление

вот пример того, как вы можете структурировать Ajax

<form id='myFormId'>
<!-- Form fields, hidden, file or otherwise -->
</form>

var formVars = $("#myFormId").serialize();
$.ajax({ url: ajaxUrl, cache: false, type: 'POST', data: formVars, 
    success: function (data) { handleSuccessCase }, 
    error: handleAjaxError });

обновление 2

на основе комментариев в https://stackoverflow.com/a/5513570/141172

можно попробовать:

var formVars = $('#myFormId').serialize() + '&foo=' + $('#id_of_your_file_input').val()

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


возможно, самое простое, что нужно сделать, это прикрепить onload событие на iframe. Когда форма завершит отправку, событие запустится.