2013-08-03 5 views
0

У меня есть форма, когда человек нажимает кнопку «Отправить», а Ajax уволен, а e.preventDefault(); используется, чтобы форма фактически не отправлялась.JavaScript/jQuery Приостановить функцию, а затем запустить ее снова

Моя проблема: я хочу, чтобы форма была отправлена ​​на сервер, но только после того, как Ajax вернулся с успехом.

Так как пример я пытаюсь достичь следующий сценарий:

  • Пользователь нажимает кнопку «Отправить»
  • Ajax обжигают посылая некоторую информацию, и пользователь остается на странице.
  • Ajax вернулся, и теперь мы можем запустить функцию success:.
  • Устранена функция успеха, и form data на сайте отправляется на сервер.

HTML-:

<form name="demoFiler" action="save/uploadCreate.php" method="POST" enctype="multipart/form-data"> 

     //Some inputs, checkboxes radios etc. 

     <input type="submit" name="submitHandler" id="submitHandler" value="Upload" class="buttonUpload hideButton" /> 

    </form> 

Javascript:

document.getElementById(this.config.form).addEventListener("submit", submitMe, false); 

    function submitMe(e){ 
    e.stopPropagation(); e.preventDefault(); 

    //Necessary vars for the 'data' defined here 

    $.ajax({ 
     type:"POST", 
     url:this.config.uploadUrl, 
     data:data, 
     cache: false, 
     contentType: false, 
     processData: false, 
     success:function(rponse){ 
         //This is where we need our Success function to SUBMIT the form using uploadCreate.php 
     } 
    }); 

    } 
+0

Это действительно не правильный способ сделать что-то. Попросите вызов AJAX выполнить всю работу формы или вернуть ошибки. Если возврат указывает, что POST был успешным, вы можете перезагрузить страницу до того, что будет целью формы. Приостановка браузера с синхронным вызовом AJAX возможна, но в целом считается ужасным пользователем. – Pointy

+0

Хм, так просто отправляйте все через Ajax или uploadCreate.php, а не частично через один или другой? – user1775598

+0

Да. Другой вариант - забыть AJAX и просто отправить форму. Таким образом, вы выполняете только один HTTP-запрос в любом случае, а не 2, когда вам это удастся. Обратите внимание, что рискованно полагаться на статус действительности данных формы, которые остаются действительными между двумя отдельными HTTP-запросами. – Pointy

ответ

1

привязывает кнопку к вместо события отправки формы, а затем запустите .submit функция на элементе формы в обратном вызове a.

$("#submitHandler").click(function(e) { 
    e.preventDefault(); 

    //Fill "data" variable 
    var data = {}; 

    //set the url 
    var url = "someurl"; 

    $.ajax({ 
    type:"POST", 
    url:url, 
    data:data, 
    cache: false, 
    contentType: false, 
    processData: false, 
    success:function(rponse){ 
     //test rponse then do below. 
     $("form[name=demoFiler]").submit(); 
    } 
    }); 
}); 
+0

Самый простой ответ для этого сценария спасибо :) – user1775598

0

Поскольку вы используете JQuery уже, попробовать что-то вроде:

$('#'+this.config.form).submit(function(e) { 
    var $this = $(this); 
    e.stopPropagation(); 
    e.preventDefault(); 

    //Necessary vars for the 'data' defined here 

    $.ajax({ 
     type:"POST", 
     url:this.config.uploadUrl, 
     data:data, 
     cache: false, 
     contentType: false, 
     processData: false, 
     success:function(rponse) { 
      // do something with rponse 
      $this.off('submit').submit(); // unbind the handler and submit 
     } 
    }); 
} 
Смежные вопросы