2010-11-20 2 views
0

(Codeigniter의 Form_Validation 클래스를 사용하여) 아약스를 통해 제출할 때 필드를 검증하는이 양식이 있습니다.하나의 jQuery Ajax 호출로 여러 요소 채우기

<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" /> 

제출시 jQuery는 CI의 유효성 검사 메소드를 호출합니다. 단일 Ajax 호출로 이러한 유효성 검증 오류를 출력하는 가장 좋은 방법은 무엇입니까?

+0

여기에 AJAX를 사용의 이점은 무엇입니까? 제대로 이해한다면 제출시 전체 양식에 대한 서버 측 유효성 검사를 사용하고 있습니다. 실제로 페이지를 제출하고 양식과 함께 서버에서 생성 된 유효성 검사 출력을 표시하는 것과 어떻게 다릅니 까? – Krab

+0

그 이유는 드롭 다운 선택에 따라 추가 필드를 표시하기 때문입니다. 페이지를 정상적으로 제출하면 해당 필드가 손실됩니다. 나는 이것을 해결하기가 훨씬 어렵다고 믿는다. –

답변

2

어쩌면이 방법이 더 서버 측에서 유효성 검사를 수행하고 (예를 들어) JSON을 반환

완벽한 솔루션보다 힌트 ...처럼 .. 당신을 도울 수 - 은 $ 진행이 참/거짓 - 검증 결과에 따라와 $ 오류가 배열 (이름, translated_error/또는 "")

부분 PHP :

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

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

부분 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

감사합니다. 그것은 위대한 작품! 실제로 JSON은 많은 문제를 해결하지만 보안에 대해서는 우려하고 있습니다. JS 코드는 최종 사용자가 사용할 수 있으므로 다른 작업 (자동화 된 요청, 대량 데이터 세트 요청)을 수행 할 수 없도록하는 방법은 무엇입니까? –

+1

공개적으로 사용할 수있는 것을 사용하면 항상 염려가됩니다. Ajax (JavaScript)는 해당 규칙의 예외는 아니지만 스스로에게 묻는 것보다 : 올바르게 사용하고 사용자 환경을 개선하기 위해 사용자에게 많은 자유를 주어야합니다. 그리고 물론 인터넷은 당신의 걱정을 피하는 좋은 예가 가득합니다. 나는 이것이 귀하의 질문에 대한 일반적인 답변 일뿐만 아니라 단순히 사실이라는 것을 알고 있습니다. 보안은 손에 달려 있습니다 (코드). 그것의 부족도 있습니다. – trix

관련 문제