在AJAX中提交表单后显示用户的所有错误

时间:2016-07-15 06:44:20

标签: php jquery ajax

我有一张表格。如果出现问题,则会显示错误消息。目前它只显示一条错误消息,即使我将错误消息推送到PHP中的数组和json编码数组。

我基本上想做的是:

$errors = []; // Array creation
if (strlen($username) < 5) { 
    // Add this error to our list
    $errors[] = 'Username not valid.';
} 

if ($password != $passwordRetype) {
    // Add this error to our list
    $errors[] = 'Password does not match our records.';
}

// Repeat this process for other errors
// Then handle your list of errors
foreach ($errors as $error) {
    echo "Error Found: $error<br>";
}   

但仅限于ajaxphp

目前我有这个(很多代码,所以跳过一些部分):

 $.ajax({
     url: $form.attr('action'),
     data: formData,
     cache: false,
     contentType: false,
     processData: false,
     type: 'POST',
     success: function(data) {
         console.log(data);
         if (data.status == 'success') {
          console.log("success");
         } else if (data.status == 'not_image') {
          console.log("this is not an image");
         } else if (data.status == 'image_exists') {
          console.log("this image exists");
         }
     });
 });

这是PHP

$errors_query = array();

            if (!empty($images)) {
                $uploadOk = 0;
                $errors++; 
                $errors_query["status"] = 'image_exists';


            }elseif(!in_array($file_type, $allowed)){
                $uploadOk = 0;
                $errors++; 
                $errors_query["status"] = 'not_image';

            }else{
                $uploadOk = 1;
                $errors_query["status"] = 'success';

            }
    if($errors > 0){
        echo json_encode($errors_query);
        exit();
    }else{
        echo json_encode($errors_query);
        exit();
    }

它工作并且只显示一条响应消息,即使这两种数据状态都是&#34; image_exists&#34;和&#34; not_image&#34;存在。如何显示用户的所有错误消息?

3 个答案:

答案 0 :(得分:1)

实际上你的ajax jquery代码有一些问题,你包含了额外的&#34; ); &#34;在成功功能部分的结束。

$.ajax({
     url: $form.attr('action'),
     data: formData,
     cache: false,
     contentType: false,
     processData: false,
     type: 'POST',
     success: function(data) {
         console.log(data);
         if (data.status == 'success') {
          console.log("success");
         } else if (data.status == 'not_image') {
          console.log("this is not an image");
         } else if (data.status == 'image_exists') {
          console.log("this image exists");
         }
     });
 });

如果您在浏览器控制台中查看结果,则可以看到提到的JavaScript错误。

$.ajax({
             url: $form.attr('action'),
             data: formData,
             cache: false,
             contentType: false,
             processData: false,
             type: 'POST',
             dataType :"json",
             success: function(data) {
                 console.log(data.status);
                 var ajaxResult = data.status;
                 if (ajaxResult.indexOf("success") != -1) {
                  console.log("success");
                }
                if (ajaxResult.indexOf("not_image") != -1 ) {
                  console.log("this is not an image");
                }
                if (ajaxResult.indexOf("image_exists") != -1) {
                  console.log("this image exists");
                 }
             }
         });

PHP代码如下。

<?php
header("Content-Type:text/json; charset=UTF-8");
$errors_query = array();
$flag1 =0 ;
$allowed = array("png","jpg","jpeg"); // Give the correct values based on your requirement
$images=""; // Assign the correct value based on your program
$file_type= ""; // Assign the correct value
$errors=0;

if (!empty($images)) {
    $uploadOk = 0;
    $errors++;
    $errors_query["status"][] = 'image_exists';
  $flag1 =1;
}

if (!in_array($file_type, $allowed)) {
    $uploadOk = 0;
    $errors++;
    $errors_query["status"][] = 'not_image';
  $flag1 =1;
}

if($flag1 == 0 ) {
    $uploadOk               = 1;
    $errors_query["status"][] = 'success';

}
if ($errors > 0) {
    echo json_encode($errors_query);
    exit();
} else {
    echo json_encode($errors_query);
    exit();
}
?>

答案 1 :(得分:0)

非常简单

就这样做

PHP代码

       $errors_query = array();


        if (!empty($images)) {

            $errors_query['msg'][] = 'Sorry Image not exists';
            $errors_query['status'] = FALSE;


        } elseif (!in_array($file_type, $allowed)) {

            $errors_query['msg'][] = 'not_image';
            $errors_query['msg'][] = 'msg2';
            $errors_query['msg'][] = 'msg3';
            $errors_query['status'] = FALSE;

        } else {

            $errors_query['msg'][] = 'success';
            $errors_query['status'] = TRUE;

        }


         echo json_encode($errors_query);

jQuery代码

 $.ajax({
             url: 'http://localhost/welcome/raja',
             cache: false,
             contentType: false,
             processData: false,
             type: 'GET',
             success: function(data) {
             var data = JSON.parse(data);
                 if (data.status === true) {

                  console.log("success");

                 } else {

                $.each(data.msg, function( index, value ) {
              console.log( index + ": " + value );
               });


                 }
             },
         });

这是我已经测试的工作示例。快乐工作............ :)

答案 2 :(得分:0)

我粗略理解(如果我错了,请纠正我)

  1. 您的PHP代码会创建一个错误数组,并通过一些if-else语句循环来检查上传文件的错误,并将错误添加到“status”键下的数组中
  2. 编码为JSON并将其传递给您的AJAX代码
  3. 然后,您的AJAX代码将根据返回JSON
  4. 返回错误消息

    我发现您的代码存在一些问题:

    1. 当您在PHP文件中使用if-else进行错误检查时,一旦记录了第一个错误,就不会检查其他错误。这是因为当第一个 if 被访问时,将跳过后续的 if-else else 语句。因此,如果确定存在该文件,则您的代码将不会检查它是否不是图像。
    2. AJAX与第1点有相同的基本问题。一旦打印出一个错误,它就不会打印出其余的错误,因此您的问题只显示1条错误消息
    3. 如果您在数组中使用相同的密钥,较旧的错误将被新的错误覆盖
    4. 要纠正,您可以执行以下操作:

      1. 将每条错误消息添加为原始数组的子数组中的单个元素,例如 $ errors_query [errors] [] 。这将允许您使用其他元素 - 如 $ errors_query [status] - 来填充您的状态。查看有关如何将元素添加到数组末尾的array_push函数。这种方法的优点是您不必担心会有多少错误消息 - 只需继续添加到数组的末尾。
      2. 然后,您的AJAX代码应遍历您在步骤1中创建的子阵列(此处为“errors”)并相应地打印出来。
      3. 不幸的是,我现在使用的计算机上没有生产软件,因此我无法为您复制编写正常工作的代码,但希望这可以让您接近方向。