0

スクリプトファイルに次のコードがあります。

$.ajax({
    url: "server.php?saveEvent",
    data: "myEvent=" + JSON.stringify(myEvent),
    dataType: "json",
    type: "post",
    success: function (data) {
        if (data) {
            $("#log").append("<br />Evenement saved.");
        }
    }
});

server.phpで、次を使用して変数を取得します。

if (isset($_GET['saveEvent'])) {
    if (isset($_POST['myEvent'])) {
        $firephp->log(gettype($_POST['myEvent']));
        $myEvent = json_decode($_POST['myEvent'], true);
    }
}

ローカルホストでこれをテストしたところ、すべてうまくいきました。残念ながら、デプロイ後、$myEventは空でした。

firephpを使用して、変数の内容をテストし、送信されるヘッダーを確認しました。オブジェクトはサーバーに送信されましたが、それでもphpはそれを空の変数と見なします。

これがどのように可能であるかについてのアイデアはありますか?それはphpバージョンですか、それともjsonの問題ですか?

編集:PHP ver = 5.2.17/jsonが有効

EDIT2:te urlを?saveEvent = 1に変更しても、何も変更されませんでした

Edit3:getとpostを作成するのは少し奇妙だと思います。それを変更してみますが、get/postは問題にならないはずです。

4

3 に答える 3

2

uriにはGETパラメータが含まれていますsaveEventPOSTデータのみをチェックしています

これをチェックしてみてください:$_GET['saveEvent']

それでも、そのパラメータには値が割り当てられていません。おそらくURLをに変更して?saveEvent=1ください。
2ifステートメントを使用する理由もありません。

if (isset($_GET['saveEvent'] && isset($_POST['myEvent']))
{
    //do stuff
}

GETvs.の問題以外にも多くのことが起こっているように思われるので、URLの最後にPOSTアンパサンド(&)を追加することをお勧めします。コンソールを見てください。XHRリクエストはURLの最後にPOSTパラメーターを貼り付けるだけです。したがって、uriは次のURLのいずれかのようになります。

server.php?saveEvent=truemyEvent=foo
server.php?saveEvent=1myEvent=foo
server.php?saveEventmyEvent=foo
//or
server.php?saveEvent=1?myEvent=foo

一方、必要なものは次のとおりです。

    server.php?saveEvent=1&myEvent=foo&something=else

基本的に、POSTまたはGETのいずれかの1つのメソッドに固執し、さまざまなパラメーターが分離されているはずのように分離されていることを確認します。
これが問題かどうかはわかりませんがvar_dump、スーパーグローバルを、$_REQUESTと一緒に試してみてください...$_GET$_POST

于 2012-11-05T20:06:37.350 に答える
1

使用の動作はserver.php?saveEventサーバーによって明確に定義されていますか?これを行う動作は、サーバーまたはPHPのバージョンによって異なる場合があります。PHP変数は何で設定されますか?その速記を使うのははっきりしないので、isset()あなたのように使うのは緊張します。server.php?saveEvent=trueきっとあなたが設定されるように、私はもっと普通のようなものを使うでしょうsaveEvent

于 2012-11-05T20:05:38.220 に答える
1

データで文字列の代わりにオブジェクトを使用してみてください

data: {myEvent:myEvent},
于 2012-11-05T20:12:57.453 に答える