-1

以前にこの質問をしたことは知っていますが、基本的にこれについてまだ助けが必要です:

以下に示すように、bookings.php にある予約グリッドがあります。

ここに画像の説明を入力

この予約グリッドには、dblClick イベントがあります。

    ondblClickRow: function(rowid)
    {

        rowData = $("#bookings").getRowData(rowid);
        var brData = rowData['bookref'];

        getGridRow(brData);

        $("#cp-bookings-dialog").dialog({ hide: 'slide', height: 625, width: 733, title: 'Booking Reference: - '+ brData});
    },

これにより、bookings.php で Jquery ダイアログ ウィンドウも開きます。

<div class="cp-tiles-wrapper-dlg">

<div class="cp-booking-info left">

<p class="pno-margin">Booking Date: &nbsp;<strong>Booking Reference is = <? echo BookingDocket::get_bookref(); ?></strong></p>
<p class="pno-margin">Return Date: &nbsp;<strong><? echo BookingDocket::get_bookdate(); ?></strong></p>
<p class="pno-margin">Journey: &nbsp;<strong></strong></p>
<p class="pno-margin">Passenger Tel: &nbsp;<strong></strong></p>
<p class="pno-margin">E-mail: &nbsp;<strong></strong></p>

</div>

</div>

ここで、brData は、PHP スクリプトで使用する「Booking Reference」の値です。現在、この dblClick イベントは次の Ajax リクエストに送信されています。

function getGridRow(brData) {

   $.ajax({

    url: 'scripts/php/bootstrp/all.request.php',
    type: 'POST',

    data: {

        fnme: 'getDGRow',
        rowdata: brData,

        id: null,
        condition: null
    },
    dataType: 'text/xml',
    timeout: 20000,
    error: function(){
        alert("It failed");
        $('#cp-div-error').html('');
        $('#cp-div-error').append('<p>There was an error inserting the data, please try again later.</p>');
        $('#cp-div-error').dialog('open');
    },
    success: function(response){

        // Refresh page

        //response = brData;
        //alert(response); <-- This alerts the correct Booking Reference value

    }
});

all.request.php に送信されるもの

// Switch to determine method to call
switch ($_REQUEST['fnme']) {

case 'getDGRow':
header('Content-type: text/xml');
GetBookings::getGridRow($_REQUEST['rowdata']);
break;

最後に、この Jquery 値を使用する PHP スクリプトに移動します。

class GetBookings {

public static function getGridRow($rowdata) {

$pdo = new SQL();
$dbh = $pdo->connect(Database::$serverIP, Database::$serverPort, Database::$dbName, Database::$user, Database::$pass);

try {

    $query = "SELECT * FROM tblbookings WHERE bookref = '$rowdata'";

    //echo $query; <-- this passes the correct Booking Reference to £rowdata

    $stmt = $dbh->prepare($query);

    $stmt->execute();

    $row = $stmt->fetch(PDO::FETCH_BOTH);

       BookingDocket::set_id($row['id']);
       BookingDocket::set_bookref($row['bookref']);
       BookingDocket::set_bookdate($row['bookingdate']);
       BookingDocket::set_returndate($row['returndate']);
       BookingDocket::set_journeytype($row['journeytype']);
       BookingDocket::set_passtel($row['passengertel']);
       BookingDocket::set_returndate($row['returndate']);



    $stmt->closeCursor();

}

catch (PDOException $pe) {
    die("Error: " .$pe->getMessage(). " Query: ".$stmt->queryString);
}

$dbh = null;

    }


}
?>

理由はわかりませんが、これは機能していないようです。基本的にJquery Dialogウィンドウを開いた時点で$rowdataはnullですが、クエリをエコーすると$rowdata正しい値が表示されます。

jqueryウィンドウのコードを別のphpファイルに入れようとしましたが、成功したajaxスクリプトに次を追加しました:

        $('#cp-bookings-dialog').load('bookings-dialog.php', function() {
           alert('Load was performed.');
        });

しかし、これは何の違いもありません。たとえば、$rowdata を 'BR12345' に設定すると、jquery の予約ダイアログに必要な値が表示されるため、すべてのコードが正しいことがわかります。私が行う必要があると考えているのは、値$rowdataが PHP スクリプトに渡された後に PHP クエリを実行することです。

誰も私がこれを行う方法について何か考えを持っていますか?

4

1 に答える 1

1

ポップアップで使用するには、PHP スクリプトから JSON でエンコードされたオブジェクトを返す必要があります。エコー呼び出しは、AJAX 呼び出しが行われる前に評価されます。さらに悪いことに、状態についてはまったくわかりませんGetBookings(状態は単一の要求に対してのみ有効です)。

そして、なぜeveryingなのstaticですか?それは悪いソフトウェア設計のように見えます。

于 2012-07-11T08:11:08.320 に答える