0

フィールドを Codeigniter コントローラーに渡して処理する ajax フォームをセットアップしました。私の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 つずつ処理します。私が本当に望むのは、エラー メッセージを配列にプッシュして、一度にすべて表示できるようにすることです。どうすればこれを行うことができますか?前もって感謝します。

4

2 に答える 2

1

inputまず、codeignitersオブジェクトを使用してフォーム変数にアクセスする必要があります。

メッセージを格納する配列を作成しました。エラーが発生した場合、メッセージがアレイにプッシュされました。すべてのチェックが完了すると、$msg配列サイズが 0 より大きい場合、エラーが発生したことがわかります。

PHP

$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));

成功コールバックの Javascript

クライアント側では、すべてのエラーの順序付けられていないリストを作成し、それを に追加します#response

var list = $('<ul />').appendTo($('#response').empty());
for (var e in data.msg) {
    $('<li />', {text: data.msg[e]}).appendTo(list);
}
于 2013-03-12T15:54:11.293 に答える
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);
   }
}
于 2013-03-12T16:26:34.987 に答える