2

Webアプリケーションを作成していますが、次の問題があります。

私のアプリケーションでは、ユーザーは1つのページ内で作業しており、キャンバスに描画します。「保存」というボタンが1つあります。これにより、ユーザーIDと、キャンバスで作成したものがすべて取得され、データベースに送信されます。これはすべて正常に機能します。保存機能はこれを再構成します:

$.ajax({
    url: "/database/write.php",
    type: "POST",     
    data: { 
        docName: name,
        docData: document_Data,
        docMode: "new"
    }, 
    success: function(html) {
        alert("Successfully Saved NEW document");
        set_Mode();
    },          
});

上記のAJAXリクエストは3つの値をPHPスクリプトに送信し、PHPスクリプトはデータベースに新しいドキュメントを正常に作成します。次に行う必要があるのは、アプリケーションモードを新しいドキュメントの保存から以前に保存したドキュメントの編集に変更することです。これは、ユーザーが再度保存すると、同じ行に書き込み、以前のバージョンのドキュメントを上書きすることを意味します。

データをに送信するwrite.phpと、DBにデータが書き込まれ、挿入されたドキュメントをデータベースに照会して、一意のドキュメントIDを取得します。そのIDを使用すると、アプリケーションはそのドキュメントを選択して上書きできます。クエリからドキュメントIDを取得するには、次のコードを使用します。write.php

write.php

$_SESSION['DOCUMENT_ID'] = $DOCUMENT_ID;

SELECTこの$DOCUMENT_IDは、クエリから取得したドキュメントIDです。その後、スクリプトは終了し、制御をメインのアプリケーションページに戻します。

アプリケーションページに戻って、値を取得しようとしましたが、機能していないようです。$_SESSIONユーザーが最初にアプリケーションにアクセスしたときに設定された値( )を取得できますidが、現在はwrite.phpDOCUMENT_ID)ページで設定された値を取得できます。たとえば、以下は、AJAXリクエストが成功した後に呼び出される関数を示しています。

function set_Mode()
{
    var PHPvar_01 = <?php echo($_SESSION['id']); ?>;
    alert(PHPvar_01); //WORKS FINE

    var PHPvar_02 = <?php echo($_SESSION['DOCUMENT_ID']); ?>;
    alert(PHPvar_02); //DOES NOT WORK.          
};

$_SESSIONここでは機能していないように見えるため、PHPクエリスクリプトから取得したデータをアプリケーションに送信するにはどうすればよいですか。

フィードバックをありがとうございます。

4

4 に答える 4

1

write.php で、ページの最後に $DOCUMENT_ID をエコーする必要があります。そうすれば、success 関数はそれをhtml引数で受け取ります。次に、success 関数に渡された変数をset_Mode使用して呼び出す必要があります。html

ページが読み込まれ、ドキュメントIDわかるset_Modeまで呼び出すことはできません。最初のページ読み込みで、ドキュメント ID を知らないうちに関数に書き込んでいます。set_Mode

于 2012-05-08T18:16:21.547 に答える
1

PHP コードは、ページの最初の読み込み時に1 回だけ実行されます。サーバーはサイトへのリクエストを検出し、PHP ドキュメントを内部的にロードして解析し、クライアントに配信します。

したがって、AJAX 呼び出しが返されたときに、PHP スクリプト全体が再度実行されることはありません。これは、ユーザーがページ全体を要求したのではなく、write.php.

スクリプトは、何らかの方法で をwrite.php返す必要があり$DOCUMENT_IDます。たとえば、直接エコーするなどです。その後、jQuery AJAX 呼び出しの成功ハンドラーは、ハンドラーのパラメーターを介してアクセスできます (jQuery のドキュメントを参照)。

于 2012-05-08T18:18:03.977 に答える
1

ページがユーザーのブラウザーに既にロードされている場合、ajax を使用する場合を除き、サーバー上の変数にアクセスすることはできません。

何かを送り返す必要があり、PHP で行う必要があるのは、何かをエコーし​​、Ajax 呼び出しの成功関数でキャプチャすることだけです。

/database/write.php の最後で、

echo $_SESSION['DOCUMENT_ID'];

そしてJSで

$.ajax({
    url: "/database/write.php",
    type: "POST",     
    data: { 
        docName: name,
        docData: document_Data,
        docMode: "new"
    }, 
    success: function(data) {
        alert("Successfully Saved NEW document");
        set_Mode();
        if (data == 'something') {
           //do something with the returned DOCUMENT_ID stored in the data variable
        }
    },          
});
于 2012-05-08T18:18:49.053 に答える
1

write.php の最後に:

echo json_encode(array('id'=>$_SESSION['id'], 'DOCUMENT_ID'=>$_SESSION['DOCUMENT_ID']));

あなたのajax呼び出しで:

success: function(data) {
    data = eval('('+data+')');
    alert("Successfully Saved NEW document");
    set_Mode(data.id, data.DOCUMENT_ID);
},     

これでうまくいくはずです!

于 2012-05-08T18:18:52.027 に答える