2010-03-05 10 views
7
$('#post_form').submit(function() { 
    $("#ajax_bar_loader").show(); 
    $.ajax({ 
     url: 'add.html', 
     data: $('#post_form').serialize(), 
     dataType: 'json', 
     type: 'post', 
     success: function(result) { 
      retVal = formCheck(result); 
     } 
    }); 

    return false; 
}); 

Kodum neye benziyorsa ve "false döndür" yerine, "sonuç" ifadesinde yer alan veriler buna izin verirse izin vermek istiyorum. Bunu nasıl başarabilirim?

cevap

3

Böyle yapabileceğini:

geri gönderme ve ayrılıyoruz yana
$.ajax({ 
    url: 'add.html', 
    data: $('#post_form').serialize(), 
    dataType: 'json', 
    type: 'post', 
    success: function(result) { 
     retVal = formCheck(result); 
     if(retVal) 
      $('#post_form').unbind('submit').submit(); 
     else 
      alert('Error with your form! Oh crap!'); 
    } 
}); 

, bu sadece başarılı olursa bu işleyicisi keser ve onu çağrılırken normalde gerçekleşmesi göndermenizi sağlar, böylece kod koşmaz ve tekrar kontrol etmez, sadece gönderir.

+0

JQuery'de ilk önce açmanız gerekir mi? Her iki şekilde de, formu doğru bir şekilde yeniden kontrol eden atıklar mı sunacak? –

+0

@Jeff - Gönderme işleyicisinde bu olduğundan, siz yapmadıysanız bu kod yeniden çalışır. –

+0

@Nick teşekkürler, ancak geri dönüşü çalıştırıyor olsa bile yine de gönderir; doğru? –

0
 
    success: function(result) { 
     ... 
     document.forms.post_form.submit(); 
    } 
2

Normal form gönderimini önlemek için olay işleyicisinin sonunda her zaman false döndürmeyi öneririm. göndermek işleyici $.ajax çağrıdır aşağıdaki kodu beri, yürütme gerçek dışıdır tamamlar önce yangın

$('#post_form').submit(function() { 
    $("#ajax_bar_loader").show(); 
    $.ajax({ 
     url: 'add.html', 
     data: $('#post_form').serialize(), 
     dataType: 'json', 
     type: 'post', 
     success: function(result) { 
      if(result == 'something') { 
       alert("some error happened"); 
      } else { 
       // assuming we're visiting the form's action 
       window.location.href = $(this).attr("action"); 
      } 
     } 
    }); 
    return false; 
}); 

başarı callback'inde güvenerek: $.ajax için başarı callback'inde içinde, koşullu sunucudan yanıt dayalı redirect olabilir Başarısızlık geri dönüşü gerçekleştirilmeden önce değerlendirilme olasılığı yüksektir ($.ajax, senkronize olmayan bir şekilde çalışır).

+0

Ancak bu, form verilerinin herhangi bir form verisini formun eylemine sunmaz mıydı? –

0

Bu sorunun sizin için işe yarayıp yaramayacağından emin değilim, ancak ajax isteğini senkronize ederseniz ne yapmalısınız?

Bu kukla kodu "işe" aldım, ajax isteğini tetikler ve sonra bir boole oluşturur. Sonra form, true veya false değerine göre döner:

İlgili konular