0

PHP の結果に応じて、さまざまなエラー メッセージを HTML DIV に送り返そうとしています。私はここや他の場所を検索しましたが、私の状況でうまくいくと思われる答えを見つけることができませんでした.他の誰かが私を助けてくれることを願っています.

私の HTML ページには、ユーザーが予約 ID # (一意) を入力するように求められるフォームが含まれています。ユーザーがこれを行い、[予約の検索] を押すと、Jquery スクリプトが呼び出され、AJAX 経由で ID が PHP スクリプトに送信されます。データが返され、「populate」と呼ばれる jquery プラグインを使用してフォームに入力されます。

スクリプトは次のとおりです。

<script type="text/javascript">
$(document).ready(function(){
    resetForms('reservation');
    $('#form-reservation').submit(function(event){ 
        event.preventDefault();  //the page will no longer refresh on form submit.
    var resCheck = $(this).find('input[class="reservationid"]').val(); //now we have the reservation ID, let's perform our check.
        $.ajax({ 
            url: 'inc/searchres.php', 
            type: 'POST',
            data: 'resid='+resCheck, 
            success: function(data){  //data is all the info being returned from the php file 
                resetForms('reservation');  //clear forms
                $('#reservation-id').val(resCheck);  //add res ID back into text box
                var jsonData = $.parseJSON(data);  //parse returned JSON data so we can use it like data.name, data.whatever 
                $("#res-message").html('<a>Reservation ID Located, Information is displayed below</a>');
                $('#json-reservation').populate({personal_first_name:jsonData['element_1_1'],personal_last_name:jsonData['element_1_2'],personal_phone_1:jsonData['element_7'],personal_email:jsonData['element_2'],reservation_status:jsonData['ADD THIS CELL'],reservation_date:jsonData['element_3'],reservation_time:jsonData['element_4'],reservation_party:jsonData['element_5'],reservation_special_request:jsonData['element_6'],reservation_using_coupon:jsonData['element_9'],reservation_coupon_code:jsonData['element_10'],reservation_status:jsonData['element_11']});
            },
            error: function(){
                $("#res-message").html('<a>There was an error with your request</a>');
            }
        });
    });
});
</script>

これは、次のフォームから呼び出されました (これには、エラー メッセージ res-message を入力したい DIV も含まれます)。

<form name="form_reservation" id="form-reservation">
                    <div style="padding:10px 20px 10px 10px;">
                    <label for="reservation-id">Reservation ID</label>
                        <input name="reservation_id" id="reservation-id" class="reservationid" style="width:120px !important"/>
                        <div class="res_message" id="res-message">&nbsp;</div>
                        <input type="submit" class="button" value="Search Reservation" style="width:150px !important; margin:10px 0px 0px 5px;"/>
                        <input type="button" class="button" value="Clear" style="width:150px !important; margin:10px 0px 0px 5px;" onclick="resetForms('reservation')" />
                    </div>
                </form>

入力されたフォームは、この質問にとって重要ではありません。最後に、PHP は次のようになります。

<?php
    include('config-searchres.php');

    $term = $_POST['resid'];
    $sql = mysql_query("SELECT * FROM ap_form_8 WHERE id = '$term'"); //select first name (element_1_1) from form #8
    //$sql = mysql_query("SELECT * FROM ap_form_8 WHERE element_12 = '$term'");  //real selector will look for unique number that has not been added to table yet

    if ($row = mysql_fetch_array($sql)){  //if reservation number exists
        if ($row['element_11'] != 'Cancelled'){  //if reservation has not already been cancelled
            if (strtotime($row['element_3']) >= strtotime(date("Y-m-d"))){  //if reservation has not already passed date
                echo json_encode($row);
            }
            else  //Reservation already passed (old reservation)
            {
                echo $error = "Passed"; 
                //echo 'passed';
            }
        }
        else  //Reservation already cancelled
        {
            echo 'cancelled';
        }
    }
    else  //Reservation not found
    {
        echo 'not found';
    }
    mysql_close();
?>

私は PHP についてほとんど何も知りませんが、このスクリプトが私のテーブルにデータを入力するために機能しているように見えることは知っています...他の状況ではエラーを表示しません。3 つの異なるエラー、'passed'、'cancelled'、および 'not found' は、それぞれの状況で返される必要があります。誰にもアイデアがありますか?

4

2 に答える 2

0

手っ取り早い解決策は、返された結果をテストして、それが文字列か配列かを確認することです。JavaScriptで:

                (...)
                var jsonData = $.parseJSON(data);  //parse returned JSON data so we can use it like data.name, data.whatever
                if (typeof(jsonData)=='object'&&(jsonData instanceof Array)) {
                    // jsonData is an array, populate success div
                    $("#res-message").html('<a>Reservation ID Located, Information is displayed below</a>');
                    $('#json-reservation').populate({personal_first_name:jsonData['element_1_1'],personal_last_name:jsonData['element_1_2'],personal_phone_1:jsonData['element_7'],personal_email:jsonData['element_2'],reservation_status:jsonData['ADD THIS CELL'],reservation_date:jsonData['element_3'],reservation_time:jsonData['element_4'],reservation_party:jsonData['element_5'],reservation_special_request:jsonData['element_6'],reservation_using_coupon:jsonData['element_9'],reservation_coupon_code:jsonData['element_10'],reservation_status:jsonData['element_11']});

                } else {
                    // jsonData is a simple string, so PHP returned an error. populate error div
                    $("#res-message").html('<a>There was an error with your request</a>');
                }
                (...)

もちろん、エラーを処理するときに、必要に応じてjsonDataの内容をオンにして、特定のエラーメッセージを提供できます。

于 2012-04-25T02:30:06.240 に答える
0

問題は、PHP コードからのさまざまなエラー メッセージが JSON 文字列として送信されないことです。したがって、「jsonData = $.parseJSON(data);」を使用する場合 それは例外です。以下のコードを使用してみてください。

    <script type="text/javascript">
    $(document).ready(function(){
     resetForms('reservation');
     $('#form-reservation').submit(function(event){ 
     event.preventDefault();  //the page will no longer refresh on form submit.
     var resCheck = $(this).find('input[class="reservationid"]').val(); //now we have the reservation ID, let's perform our check.
     $.ajax({ 
        url: 'inc/searchres.php', 
        type: 'POST',
        data: 'resid='+resCheck, 
        success: function(data){  //data is all the info being returned from the php file 
            resetForms('reservation');  //clear forms
            $('#reservation-id').val(resCheck);  //add res ID back into text box
            try 
            {
             var jsonData = $.parseJSON(data);  //parse returned JSON data so we can use it like data.name, data.whatever 
             $("#res-message").html('<a>Reservation ID Located, Information is displayed below</a>');
             $('#json-reservation').populate({personal_first_name:jsonData['element_1_1'],personal_last_name:jsonData['element_1_2'],personal_phone_1:jsonData['element_7'],personal_email:jsonData['element_2'],reservation_status:jsonData['ADD THIS CELL'],reservation_date:jsonData['element_3'],reservation_time:jsonData['element_4'],reservation_party:jsonData['element_5'],reservation_special_request:jsonData['element_6'],reservation_using_coupon:jsonData['element_9'],reservation_coupon_code:jsonData['element_10'],reservation_status:jsonData['element_11']});
            }
            catch 
            {
              $("#res-message").html('<a>There was an error with your request</a>');
              $('#json-reservation').populate({status:data});
            }
          }
        });
      });
     });
     </script>

このコードはテストしていませんが、少なくともロジックは機能するはずです。

于 2012-04-25T12:34:01.257 に答える