Php 检索自定义错误Jquery
我不知道如何使用jquery在表单上显示自定义消息。我正在使用Yii,我调用了一个操作来更新我的数据库。我想做的是在表单出现错误的情况下显示一些错误消息 第一个行动是:Php 检索自定义错误Jquery,php,jquery,yii,Php,Jquery,Yii,我不知道如何使用jquery在表单上显示自定义消息。我正在使用Yii,我调用了一个操作来更新我的数据库。我想做的是在表单出现错误的情况下显示一些错误消息 第一个行动是: if($this->id == "survey") { // Esta condicición es por si se trata de mail, sms, qr o tpe (queda pendiente el callback) ?> x$("input#surveysubmit").cli
if($this->id == "survey") { // Esta condicición es por si se trata de mail, sms, qr o tpe (queda pendiente el callback) ?>
x$("input#surveysubmit").click(function() {
var data = serialize(document.getElementById("token-form"));
if(!checkRequiredBeforeSubmit(data)) return;
x$().xhr('<?php echo $this->createUrl('survey/index', array('id'=>$model->skey)); ?>', {
method: 'POST',
async: true,
data: urlstringserialize(serialize(document.getElementById("token-form"))),
callback: function() {respOK(this.responseText);}
});
});
controlRequiredValues是控制错误的函数:
public function controlRequiredValues($model, $answers) {
//Recupero Oleada
$wave = $model->wave;
//Recupero Campaña/Centro
$campaignCenter = $wave->campaignCenter;
//Recupero Campaña
$campaign = $campaignCenter->campaign;
//Recupero Template
$template = $campaign->template;
//Recupero Preguntas del template
$questions = $campaignCenter->campaign->template->questions;
//Primero miro si las answers que me vienen en la encuesta son required o no
foreach($answers['answers'] as $key=>$qvalue) {
//Si existe la pregunta para la respueta que me han enviado, es una pregunta requerida y su valor es nulo
$question = Question::model()->findByPk($key);
if (isset($question) && $question->required == 1 && $qvalue = ""){
$arr = array('error' => $question->id. " is required");
return json_encode($arr);
}
//Si no, hay que mirar si tiene condicional relacionado con otra pregunta
else{
$questioncondition = QuestionCondition::model()->find('question_id=:qid0 AND reqshow=:rs0', array('qid0'=>$question->id, 'rs0'=>'req'));
if (isset($questioncondition)){
if (array_key_exists($questioncondition->question_id_dep, $answers['answers'])) {
$cond = $qvalue. " " . $questioncondition->operator . " " . $questioncondition->rvalue;
if (!$cond){
$arr = array('error' => $question->id. " is required");
return json_encode($arr);
}
} else {
$arr = array('error' => $question->id. " is required");
echo json_encode($arr);
}
}
}
}
//Ahora miramos en las preguntas del template.
$questions = $template->questions;
foreach($questions as $question) {
//Si en el template dice que la pregunta es required
if (isset($question) && $question->required == 1) {
//Puede que no exista en el array de respuestas o si existe que esté en blanco, en cuyo caso mostraremos error.
if(array_key_exists($question->id, $answers['answers'])) {
$clave = array_search('', $answers['answers']);
if (isset($clave)){
$arr = array('error' => $question->id. " is required");
return json_encode($arr);
} else {
$questioncondition = QuestionCondition::model()->find('question_id=:qid0 AND reqshow=:rs0', array('qid0'=>$question->id, 'rs0'=>'req'));
if (isset($questioncondition)){
if (array_key_exists($questioncondition->question_id_dep, $answers['answers'])) {
$cond = $qvalue. " " . $questioncondition->operator . " " . $questioncondition->rvalue;
if (!$cond){
$arr = array('error' => $question->id. " is required");
return json_encode($arr);
}
} else {
$arr = array('error' => $question->id. " is required");
return json_encode($arr);
}
}
}
} else {
$arr = array('error' => $question->id. " is required");
return json_encode($arr);
}
} else {
$questioncondition = QuestionCondition::model()->find('question_id=:qid0 AND reqshow=:rs0', array('qid0'=>$question->id, 'rs0'=>'req'));
if (isset($questioncondition)){
if (array_key_exists($questioncondition->question_id_dep, $answers['answers'])) {
$cond = $qvalue. " " . $questioncondition->operator . " " . $questioncondition->rvalue;
if (!$cond){
$arr = array('error' => $question->id. " is required");
return json_encode($arr);
}
} else {
$arr = array('error' => $question->id. " is required");
return json_encode($arr);
}
}
}
}
}
我要做的是向最终用户显示这些错误。您可以尝试对flash消息使用默认错误操作
public function actionError() {
if ($error = Yii::app()->errorHandler->error) {
if (Yii::app()->request->isAjaxRequest)
Yii::app()->user->setFlash('error', $error['message']);
else {
$this->render('error', $error);
//or
Yii::app()->user->setFlash('error', $error['message']);
}
}
}
在组件数组的config/main.php
中添加:
'errorHandler'=>array(
'errorAction'=>'site/error',
),
然后,只要在需要时抛出一个新的基本/自定义异常
更多信息,请点击这里:
编辑:
实现此功能后,您可以在需要时抛出CException,而不仅仅是针对此特定请求。
或者,您可以实现此功能,并保持controlRequiredValues()不变,并更改此功能:
if ($requiredok == '') {
$isok = $model->createAnswersForToken($model->transformSurveyRawData($_POST));
if ($isok) {
$this->redirect(array('view', 'id' => $model->id));
}
}
为此:
$isok = $model->createAnswersForToken($model->transformSurveyRawData($_POST));
if ($isok) {
$this->redirect(array('view', 'id' => $model->id, 'error' => $requiredok));
}
因此,删除if语句,检查
$requiredok
是否为空并将其传递给视图,然后在视图中检查它是否为空以及是否不是抛出a。感谢Aleksandar B。此actionError函数必须替换为:$arr=array('error'=>$question->id.“是必需的”);返回json_encode($arr);不是吗?您在SiteController中实现actionError(),并在配置中将其设置为默认(全局)错误处理程序。而不是返回json\u encode($arr)代码>和回声json_编码($arr)
抛出一个新异常,如下所示:抛出新的CDbException('messagehere')代码>或对于Http抛出新的CHttpException($status,'messagehere')代码>。在CDBEException中,错误代码是可选的,但对于HttpException则是必需的。我将用更多的细节更新我的答案。我无法更改$requiredok代码,因为如果出现任何错误,我必须避免创建答案。
$isok = $model->createAnswersForToken($model->transformSurveyRawData($_POST));
if ($isok) {
$this->redirect(array('view', 'id' => $model->id, 'error' => $requiredok));
}