2013-03-12 2 views
0

처리 할 Codeigniter 컨트롤러에 필드를 전달하는 위치에 ajax 양식이 설정되어 있습니다.Codeigniter 유효성 검사를위한 Ajax 게시 양식 데이터

... 
dataType : 'json', 
data : { 
    'name' : $('#name_recipe').val(), 
    'email' : $('#email').val(), 
    'town' : $('#town').val() 
}, success : function (data, status){ 
    if(data.status != 'error') { 
     $('#name').val(''); 
     $('#email').val(''); 
     $('#town').val(''); 
    } 
    $('#response').html('<p>'+data.msg+'</p>'); 
} 

을 내 컨트롤러에서 나는 예를 들어, 별도로 처리 : 내 아약스는 다음과 같습니다

if(empty($_POST['name'])) { 
    $status = "error"; 
    $msg = "The <b>Name</b> field is required."; 
} else { 
    $name = $_POST['name']; 
} 

echo json_encode(array('status' => $status, 'msg' => $msg)); 

그러나이 하나씩 오류 메시지를 처리하고 내가 정말하고 싶은 것은이다 배열로 밀어 넣어서 한번에 모두 보여줄 수 있습니다. 이 일을 어떻게 하죠? 미리 감사드립니다.

답변

1

먼저 codeigniters input 개체를 사용하여 양식 변수에 액세스해야합니다.

메시지를 저장할 배열을 만들었습니다. 오류가 발생하면 메시지가 배열로 푸시됩니다. 모든 검사가 완료되면 $msg 배열 크기가 0보다 크면 오류가 발생했음을 알 수 있습니다.

PHP 클라이언트 측에

콜백, 우리는 모든 오류의 정렬되지 않은 목록을 작성하고 #response에 그것을 추가 자바 스크립트의 성공에

$msg = array(); 

$name = $this->input->post('name'); 
$email = $this->input->post('email'); 
$town = $this->input->post('town'); 

if (!$name) { 
    $msg[] = '<p>The <b>Name</b> field is required'; 
} 
if (!email || !filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    $msg[] = '<p>The <b>Email</b> field is not valid'; 
} 
if (!$town) { 
    $msg[] = '<p>The <b>Town</b> field is required'; 
} 

$status = count($msg) ? 'error' : 'success'; 

echo json_encode(array('status' => $status, 'msg' => $msg)); 

.

var list = $('<ul />').appendTo($('#response').empty()); 
for (var e in data.msg) { 
    $('<li />', {text: data.msg[e]}).appendTo(list); 
} 
+0

물론 화려한! 당신은 당신이 저를 구해준 두통을 전혀 모릅니다 :) 고마워요! –

0

당신의 컨트롤러 :

# validate (recommend Ci validation) 
$msg = ''; 
if (!$name) $msg .= 'The name field is required<br />'; 
if (!email || !filter_var($email, FILTER_VALIDATE_EMAIL)) $msg .= 'The Email field is not valid <br />'; 
if (!$town) $msg .= 'The Town field is required<br />'; 

if($msg != '') exit($msg); 

# process 
$this->my_model->process(); 

exit('success'); 

JS :

... 
success : function (data) { 
    if(data == 'success') { 
     $('#name').val(''); 
     $('#email').val(''); 
     $('#town').val(''); 
    } else { 
     $('#response').html(data); 
    } 
} 
관련 문제