2010-10-05 2 views
2

Я использую ASP.NET MVC. Таким образом, у меня есть форма на моей странице:AJAX вызов в функции отправки формы jQuery

<form id="MyForm" name="MyForm" method="post" action="http://www.mysite.com"> 
    <input id="hdnType" name="hdnType" type="hidden" /> 
</form> 

Я использую JQuery представить действие, чтобы сделать некоторые проверки, прежде чем форма размещена. Также нужно сделать вызов AJAX, чтобы установить «hdnType» на основе других значений из нескольких выпадающих, что я не включил в этом примере:

$('#MyForm').submit(function() 
{ 
    if (!ValidForm()) 
     return false; 

    $.ajax({ 
     type: "POST", 
     url: '/Home/GetType', 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(response) 
     { 
      $('#hdnType').val(response); 
     } 
    }); 

    return true; 
} 

Все в функции представить() предполагается запустить до формы сообщений. Это работало правильно, прежде чем я добавил, что вызов AJAX, но теперь, когда код достигает моего вызова AJAX, сообщения формы до того, как я могу установить «hdnType».

Есть ли способ обойти это?

ответ

2

У ajax-вызова есть параметр async. По умолчанию это верно. Это приводит к тому, что выполнение не выполняется и функция завершается. Попробуйте изменить его на

$.ajax({ 
    async:false, 
    type: "POST", 
    url: '/Home/GetType', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(response) 
    { 
     $('#hdnType').val(response); 
    } 
}); 

Это может быть плохая практика, так как это заморозит браузер до его завершения. Подумайте, используя функцию обратного вызова asyc, как предлагает Дейв

+0

Ницца, я не знал, что смогу это сделать. Благодарю. – Steven

1

Функция успеха называется асинхронно, после того как вызов ajax получает ответ. Если вы хотите установить hdnType перед отправкой формы, вам придется переместить этот вызов за вызов $ .ajax. Похоже, вам нужно сначала получить результат для hdnType из вашего действия POST, в отдельной функции, а затем вызвать submit в форме.

Смежные вопросы