1

私が書いた単純な ajax/jquery コードで非常に奇妙なものを見ていますが、なぜ私が見ているものを見ているのか説明できません。

私はcomplete.phpというphpファイルを持っています。現時点でこれが行う唯一のことは次のとおりです。

echo "saved";

次のような .done() 関数を持つ jquery ajax 呼び出しがあります。

jQuery.ajax({
        type: "POST",
        url: "complete.php",
        data: "id=someIdHere",
        }).done(function(d){

         alert(d);

          if(d == "saved"){
                alert('loading done');
          }else{
                alert('error');
          }
    });

私のfirebugは、complete.phpからの応答が「保存された」ことを確認しています。

「d」応答を入力すると、「文字列」型になります。

ただし、何らかの理由で、.done() 関数で受け取るアラートは「エラー」であり、「ロード完了」ではありません。

if ステートメントが「保存済み」を与える直前の「alert(d)」。

ここで何が欠けていますか?

4

3 に答える 3

1

JSON など、より堅牢な戻り値の型を使用する必要があります。

header('Content-Type: application/json');
echo json_encode(array(
    'status' => 'saved',
));

次に、成功ハンドラーで次のようにします。

if (d.status == 'saved') { ... }
于 2013-01-22T13:12:03.593 に答える
0

非常に奇妙ですが、Ivは問題を発見しました。

私のphpは

echo "saved";

これは正しいですが、@ mplungjanの提案に従ってリターンをデバッグしたとき、リターンは「保存」されました(空白付き)。これは、phpに空白がないため奇妙でした。その後、phpを次のように変更しました。

echo trim("saved");

しかし、リターンを再度デバッグすると、再び「保存」されました(空白付き)

空白が適用されている理由はわかりませんが、return / .done()関数の空白を置き換えることで解決しました。

私はこれを答えとして選択しませんが、誰かが鍬を知っているなら、空白が追加された可能性があります。

マウンテンライオンでFirefox18を使用しています

于 2013-01-22T13:08:19.787 に答える
0

試す

jQuery.ajax({
    type: "POST",
    url: "complete.php",
    data: "id=someIdHere",
    success: function(){ alert('loading done'); },
    error: function(){ alert('error'); }
    });
于 2013-01-22T13:01:25.377 に答える