2010-11-20 27 views
0

ajax yoluyla gönderilen alanları doğrulayan bu formum var (Codeigniter'in Form_Validation Sınıfı'nı kullanarak).Tek bir jQuery Ajax çağrısı ile birden çok öğeyi doldurun

<input type="text" name="field1" id="field1"> /> 
<span id="field1_error"></span> 
.... 
<input type="text" name="field2" id="field2"> /> 
<span id="field2_error"></span> 
... 
<input type="text" name="field3" id="field3"> /> 
<span id="field3_error"></span> 
<input type="submit" name="submit" id="btnPublish" /> 

Gönderme sırasında jQuery, CI'nin doğrulama yöntemini çağırır. Bu doğrulama hatalarını tek bir Ajax Çağrısı ile çıkarmanın en iyi yolu hangisidir?

+0

burada AJAX kullanarak yararı nedir? Doğru alırsam, gönderim formunun tümünde sunucu tarafı doğrulamasını kullanıyorsunuz. Bu sayfadan gerçekten gönderilmesinden ve sunucu tarafından oluşturulan doğrulama çıktısının form ile birlikte görüntülenmesi nasıl farklıdır? – Krab

+0

Bunun nedeni, bir açılır listenin seçimine bağlı olarak ek alanlar görüntülüyorum. Sayfayı normal gönderirseniz, bu alanlar kaybolur. Bunu çözmekten çok daha zor olduğunu düşünüyorum. –

cevap

2

Belki bu yaklaşım onun daha sunucu tarafta doğrulama yapacak ve (örneğin) JSON dönmek

komple çözümü daha bir ipucu ... gibi .. size yardımcı olabilir - $ ilerleme doğrudur/yanlış - doğrulama sonucuna bağlı olarak ve $ hataları dizi (ad, translated_error/veya "")

kısmi php:

$res = array(
    'progress' => $progress, 
    'errors' => $errors 
); 
$jsonReturn = json_encode($res); 

//output result 
header('Content-Type: text/html; charset=utf-8');  
echo $jsonReturn; 

kısmi jQuery:

var errorFields = $([]).add(field1_error).add(field2_error).add(field3_error), 
    mainFields = $([]).add(field1).add(field2).add(field3); 

$('#btnPublish').button().click(function(event){ 

    mainFields.removeClass('ui-state-error'); 
    errorFields.val();             

    $.ajax({ 
    type: 'POST', 
    url: your_url, 
    data: $('#your_form_id').serialize(), 
     async: false, 
     success: function (returned_value){ 
      var obj = $.parseJSON(returned_value); 

      if (obj.progress==true){ 
       alert('Validation successfull'); 

      }else{ 
       $.each(obj.errors, function(index, value) { 
        if (value!=""){ //it will skip those fields with no errors 
         $('#'+index).addClass(('ui-state-error')); 
         $('#'+index+'_error').val(value); 
        } 
       }); 

      }//end return ajax 

     }//end ajax 
    });   

}); 
+0

Bunun için teşekkürler. Harika çalışıyor! Gerçekten de JSON bir çok problemi çözüyor, ancak güvenlik konusunda endişeliyim. JS kodu son kullanıcı için kullanılabilir olduğundan, başka şeyler yapmak için nasıl manipüle edilemeyeceğinden emin olun (otomatik istekler, büyük veri setleri isteyin)? –

+1

Herkese açık olan herhangi bir şeyi kullandığınızda her zaman bir endişe vardır. Ajax (JavaScript) bu kuralın istisnası değildir, ancak kendinize sormanız gerekenden daha iyi olur: Kullanıcılarıma daha iyi bir kullanıcı deneyimi sağlamak için doğru şekilde kullanıyorum ve çok fazla özgürlük veriyorum. Ve elbette internet, bazı endişelerinizi nasıl önleyeceğinize dair iyi örneklerle doludur. Bunun sorununun genel bir cevabı olduğunu biliyorum, ama gerçek şu ki. Güvenlik sizin elinizde (kod). Bunun eksikliği de var. – trix

İlgili konular