【问题标题】:Sending json with php and parse it in ajax call用 php 发送 json 并在 ajax 调用中解析它
【发布时间】:2013-09-15 23:28:18
【问题描述】:

我没有在 php 和 ajax 中使用 JSON 的经验,我需要你的帮助。

我有一个验证用户输入的 php 页面...在使用 json 之前,我曾经将它们存储在一个数组中。当我将值存储在这样的数组中时,我能够解析 json $data = array("success"=>true, "msg"=>"my masg"); json_decode($data);

然后在我对成功函数的 ajax 调用中我 data.success 和 data.msg

如何在我的数组中存储多个消息或错误并在我的 ajax 调用中解析它们? 这是我的代码

这里我想验证用户输入,我想验证许多字段

    if(isset($_POST['txt_username']) &&($_POST['txt_username']!=""))
    {
        $username =trim( $_POST['txt_username']);
        $username  = filter_input(INPUT_POST, 'txt_username',
                    FILTER_SANITIZE_STRING);
    }
    else
    {

             }

那么在else语句中怎么做呢?

这是我的 ajax 调用

 $.ajax({       
            type: "POST",
            dataType: "json",
            cache: false,
            data: {txt_username:$("#username").val(), txt_password:$("#password").val()},

            beforeSend: function(x) {

                if(x && x.overrideMimeType) {

                    x.overrideMimeType("application/json;charset=UTF-8");
                }

            },

            url: 'proccessing_forms/admin_login.php',

            success: function(data) {

                // parse the data
            }
    });


    }

【问题讨论】:

    标签: jquery parsing


    【解决方案1】:

    您可以为此使用多维数组:

    $msg = array("success" => array(), "error" => array());
    
    // ... DO you processing on if and else
    
    //When you need to add to an success do
    $msg['success'][] = "My Success";
    
    //When you need to add to an error do
    $msg['error'][] = "My error";
    
    
    echo json_encode($msg); exit;
    

    在 ajax 的成功事件中,您可以单独访问这两个变量。

    success: function(data) {
        var errors = data.error;
        var succesess = data.success
    
        //Process each msg
        $.each(errors, function(index, msg) {
             console.log(msg);
        });
    }
    

    【讨论】:

    • @user2589904,更新了我的答案。
    【解决方案2】:

    在 PHP 中,您可以像这样创建 JSON 字符串:

    <?php
    
      $array["error"][] = "message1";
      $array["error"][] = "message2";
    
      echo json_encode($array);
    
    ?>
    

    然后在 JavaScript 回调函数中你可以这样使用它:

      success: function(data) 
      {
        $.each(data, function(key, val) {
          alert(key + " - " + val);
        });
      }
    

    当然您应该注意到,由于我在 PHP 中的更改,现在 val 是一个数组,您必须在其上运行另一个循环来获取您的内容:

      success: function(data) 
      {
        $.each(data, function(key, val) {
          $.each(val, function(key2, val2) {
            alert(key2 + " - " + val2);
          }
        });
      }
    

    【讨论】:

    • 但是如何用多个输入填充数组呢?比如当我验证下一个用户输入时我该怎么做?如果我对所有用户输入做同样的事情,那么它将覆盖它
    • @user2589904 实际上,我不确定您对more than one input 有什么要求。认为你最好提供一个例子。
    猜你喜欢
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2017-10-16
    相关资源
    最近更新 更多