0

システムをあるサーバーから別のサーバーに移動する必要があり、このページにアクセスしようとするとエラーが発生します。コードは稼働中のシステムとまったく同じですが、何らかの理由で現在は機能していません。

エラーを表示する JS コード:

var loadData = function(data) {
if(data)
    data += '&offset=' + offset;
else
    data = 'offset=' + offset;

var callback = {
    success: function(o) {
        try {
            var data = YAHOO.lang.JSON.parse(o.responseText);
        } catch(e) { alert('e: ' + e + '\no: ' + o + '\ndata: ' + data + '\noffset: ' + offset + '\n Response Text:' + o.responseText); }

        // removed a lot of pointless code (no error here)
}

YAHOO.util.Connect.asyncRequest('POST', 'json/dmrlist.php', callback, data);
}

これはアラートから出力されます。

ここに画像の説明を入力

これは「呼び出している」php コード (の始まり) ですが、スクリーンショットに見られるようにエラーがあります。

line 6: $JSON = json_decode($_POST['JSON']);

line 8: if($JSON->Depot)
line 9:     $filter = " AND `Site` = '" . $JSON->Depot . "'";

基本的に $JSON は未定義なので、何も投稿されていませんが、javascript は情報を投稿するためのもののように見えますか?

私はとても混乱しています.JSONやJavaScriptの経験がなく、なぜこれがうまくいかないのか分かりません.

4

2 に答える 2

1

データ変数はサーバーに送信されますが、おそらくキーと値のペアとして送信されます。次のようにダンプしてみることができます。

if (isset($_POST['JSON'])) {
    print_r($_POST['JSON']);
}
if (isset($_POST['Depot']) {
    print_r($_POST['JSON']);
}

または単に print_r( $_POST );

$_POST['JSON'] が設定されておらず、おそらく $_POST 配列から直接読み取ることができる単なるキーと値のペアであるため、他の値を JSON としてデコードする必要はないと思われますが、私は' YUI の ajax 関数に慣れていないので、間違っている可能性があります。サーバーの値を確認してください。

PS この方法で print_r を使用すると、無効な戻り値になります (JSON にはなりません) が、Firebug などでそれを見て、値を確認することができます。

于 2012-08-02T13:53:53.187 に答える
0

問題は、古いサーバーが古いバージョンのphpを使用しているため、「ifsets」を必要としないように見えることでした(理由はわかりません)がif(isset($_POST['JSON'])){、JSONを処理するコードの前に置いただけで、現在は機能しています. 最初のループでは何も投稿されていないため、何も受信できないと想定していますが、ifset を使用すると、php は JSON コードをスキップして db から最初の選択を取得し、ループバックすることができます。今回$_POST['JSON']は実際に設定されています。

TL;DR:古いバージョンの PHP では、ifset を入れて変数を宣言するだけで済みました。

于 2012-08-03T08:21:57.030 に答える