从 PHP 返回两个 2 json 对象


Returning two 2 json objects from PHP

我有一个带有两个输入的小反馈表。我希望错误消息使用 JQuery 在同一个div 中相互附加。如果只有一个错误消息,则错误消息工作正常,但是当我返回两个json对象时,两条消息将不会同时显示。是否可以将 2 个具有相同键的关联数组返回给 JQuery?如何将错误消息附加到同一div?除了错误消息的显示方式外,一切正常。

注意:此程序是一个JQuery移动应用程序

PHP代码

if (isset($_POST['submit'])) {
    $email = $_POST['email'];
    $feedback = $_POST['feedback'];
    $errors = array();
    if (filter_var($email, FILTER_VALIDATE_EMAIL) && !empty($email)) {
                 //Do something
    } else {
        $errors = "Invalid email.";
        echo json_encode(array("error" => "{$errors}"));
    }
    if (!empty($feedback)) {
                //Do something
    } else {
        $errors = "Feeback field can not be empty.";
        echo json_encode(array("error" => "{$errors}"));
    }
    if (empty($errors)) {
        //Database Insertion here
        echo json_encode(array("success" => "Feedback submission successful."));
    }
}  

JQuery Code

$(function() {
    $('#contact_form').bind('submit', function(event) {
        event.preventDefault();
        $.post('includes/form.php', $(this).serialize(), function(data) {
            if (data.error) {
                $('.error').slideDown(100).html(data.error);
            } else {
                $('.error').hide();
                $('.success').slideDown(100).html(data.success);
            }
        }, "json");
    });
}); 

网页表单代码

         <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" id="contact_form" data-ajax="false">
            <label for="email">Email:</label>
            <input type="text" name="email" id="email" placeholder="Email">
            <label for="feedback">Feedback:</label>
            <textarea type="text" name="feedback" id="feedback" placeholder="Feedback"></textarea>              
            <input type="submit" name="submit" value="Submit Feedback" class="submit">
        </form>

提前谢谢你。

编辑:我觉得自己太傻了。我忘了在 php 脚本中附加错误消息哈哈。感谢所有回答的人。

不能将 1 个键映射到 2 个值。

您可以在回

显 json 格式的输出之前连接所有错误

例如

 if (isset($_POST['submit'])) {
$email = $_POST['email'];
$feedback = $_POST['feedback'];
$errors = "";
if (filter_var($email, FILTER_VALIDATE_EMAIL) && !empty($email)) {
             //Do something
} else {
    $errors .= "Invalid email.<br/>";

}
if (!empty($feedback)) {
            //Do something
} else {
    $errors .= "Feeback field can not be empty.<br/>";
}
if ($errors != "") {
    echo json_encode(array("success" => "Feedback submission successful."));
}else{
    echo json_encode(array("error" => $errors));
}

我建议使用更简单的一维数组结构来存储错误消息:

$errors[0] = 'error message one';
$errors[1] = 'error message two';

从服务器输出它们:

echo json_encode($errors);

然后在获得 POST 响应后使用 jQuery.each() 遍历数组:

$.each(error, function() {
    // do something with each error
});