たぶん、このアプローチは、あなたが検証を行い、(例えば)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
});
});
ここにAJAXを使用する利点は何ですか?私が正しく理解すれば、フォーム全体のサーバー側検証を使用しています。実際にページを送信し、フォームとともにサーバによって生成された検証出力を表示することとはどのように違いますか? – Krab
理由は、ドロップダウンの選択に基づいて追加のフィールドを表示しているからです。私がページを正常に提出すると、それらのフィールドは失われます。私はこれを解決することが、上記よりもはるかに難しいと信じています。 –