1

2つの入力がある小さなフィードバックフォームがあります。JQueryを使用して、同じdiv内でエラーメッセージを相互に追加したいと思います。エラーメッセージが1つしかない場合、エラーメッセージは正常に機能しますが、2つの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コード

$(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");
    });
}); 

HTMLフォームコード

         <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スクリプトにエラーメッセージを追加するのを忘れました。答えてくれたすべての人に感謝します。

4

3 に答える 3

2

1つのキーを2つの値にマップすることはできません。

于 2012-07-02T02:32:42.990 に答える
1

エラーメッセージを格納するための、より単純な1次元配列構造をお勧めします。

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

サーバーからそれらを出力します。

echo json_encode($errors);

次にjQuery.each()、POST応答を取得した後、を使用して配列を反復処理します。

$.each(error, function() {
    // do something with each error
});
于 2012-07-02T04:33:49.437 に答える
1

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));
}
于 2012-07-02T06:49:30.817 に答える