2009-02-26 19 views
3

Jquery'nin ajax'ı kullanarak bir form göndermeye çalışıyorum. Birkaç metin kutusu, bazı onay kutuları ve çoklu seçenekler açılır (yani çoklu seçenekler seçilebilir).Jquery'nin AJAX'ı kullanarak karmaşık bir form nasıl gönderilir?

:

Burada biri ben Yukarıdaki kod tarafından döndürülen tüm değerler üzerinde döngü böyle bir diziye atayabilirsiniz Sonra

$("input:checkbox[name=type]:checked") 

kullanarak tüm seçili onay kutularına değerlerini alabilirsiniz söyledi

var types=new Array(); 

    $.each(cboxes, function() 
     { 
     types[types.length]=$(this).val(); 
     } 
    ); 

Ve bu kullanarak formu göndermek için deneyin:

var someField=$("#someField").val(); 
var someField2=$("#someField2").val(); 
var data={field1 : someField, field2=someField2, s_types:types}; 
$.post("signup.php?type=p",types); 

Ama bu kötü kokan Çalışma, özellikle onay kutuları doğru şekilde gönderilmiyor. Nasıl çalıştırabilirim?

cevap

5

Bunu yapmak için bir eklenti kullanmanızı öneririm. Bu form plug-in bir göz atın. Aynı zamanda validation plug-in ile güzelce entegre olabilir.

+0

Bu en iyi fikir. Ayrıca ajax ile dosya yüklemenizi sağlar. –

13

Form değerlerini almak için her alanın üzerinde yineleme gerekli değildir. jQuery, form girdilerini querystring'e serileştirmek için bir yönteme sahiptir. Bunu yapabilirsiniz:

$.ajax({ 
    url: "mybackend.php", 
    data: $("#myForm").serialize(), 
    success: function(e) { // do something on success }, 
    error: function(e) { // do something on error } 
}); 

javascript mesajlar hep bu yüzden uluslararası karakterler ile metin göndermek için plan eğer arka uçta o bekliyorsanız emin olun UTF-8 biçiminde veri göndermek unutmayın.

2

Varsayılan jQuery $.param dizileri işlemez (by design), böylece $ .serialize'yi olduğu gibi kullanamazsınız. kgiannakis' answer önerilen gibi ya bir eklenti, kullanın veya düzgün diziler idare edeceğiz böylece $ .param fonksiyonunu yaz:

function($) { 
    $.param = function(a) { 
    var s = []; 
    if (a.constructor == Array || a.jquery) 
     jQuery.each(a, function() { s.push(encodeURIComponent(this.name) + "=" + encodeURIComponent(this.value)); }); 
    else 
     for (var j in a) 
     if (a[j] && a[j].constructor == Array) jQuery.each(a[j], function(){ s.push(encodeURIComponent(j) + "[]=" + encodeURIComponent(this)); }); 
     else s.push(encodeURIComponent(j) + "=" + encodeURIComponent(a[j])); 
    return s.join("&").replace(/%20/g, "+"); 
    }; 
})(jQuery); 

... ve Danita önerdiği gibi, daha sonra $ .serialize kullanın.

İlgili konular