0

ここにはこの質問がたくさんあることを知っています。同じ質問を検索するのに丸一日かかりました。私の答えは何もありませんでした!ですから、私がただ複製しているだけだということわざを閉じないでください。
別のjsファイルと同じページで呼び出されるPHPファイルがあります。このPHPファイルは配列をエンコードし、同じページでエコーします(これは、ajaxリクエストから呼び出されたときです)。

$data = array(  
    "status" => $status,  
    "message" => $message,
);  

echo json_encode($data);

$status と $message の値は、それらの上のいくつかの条件によって決定されます (ここではそれほど重要ではありません)。この PHP ファイルはインデックス ファイルの先頭で呼び出されるため、<!doctype html>タグの前に JSON がエコーされます。さて、jsファイルで、このJSONを処理しようとしている部分は次のとおりです。

$.post($formUrl, $formData, function(data) {
  $data = $.parseJSON(data);
  alert($data.status);
});

変数について心配する必要はありません。変数は問題ではありません。ここで唯一の問題はその$data = $.parseJSON(data);部分です。このコードを実行すると。成功しても何も起こりませんが、PHP ファイルには、正しく実行されるデータベースへの挿入コマンドがあります。この JSON を除いて、すべて正常に動作します。取得できません! これを試すと:

$.post($formUrl, $formData, function() {
  $str = '{"a":1,"b":2,"c":3,"d":4}';
  $data = $.parseJSON($str);
  alert($data.a);
});

期待どおりに動作し、アラート 1 が表示されます。問題は、$.parseJSON()が JSON を含む HTML ファイルを解析できないことです。前述したように、PHP ファイルは < !doctype html > .
私は今とても必死です。誰でも助けることができますか?

4

3 に答える 3

4

ここでの問題は、HTML もエコーするページで PHP スクリプトから JSON を出力していることです。JSON のみをエコーする PHP スクリプトが必要です。また、PHP ファイルで、JSON MIME タイプを送信することもできます。

header("Content-type: application/json");
于 2012-08-04T04:48:21.177 に答える
2

json_encode の直後にサイコロを振ってみてください。$_POST が空でないことを確認する if ステートメントですべてをまとめることができます。したがって、最初の読み込みでは html だけが取得されますが、ajax の投稿では json だけが取得されます。

また、これを使用してみてください:

$.ajax({
    url: $url,
    data: $formData,
    type: "POST",
    dataType: "json", // this tells jquery to expect json back, and parses it automatically
    success: function(data) { alert(data.status) }  
})
于 2012-08-04T04:54:07.373 に答える
2

簡単にできると思います..

json第 4 パラメータを$.post()for に送信しますdataType

$.post($formUrl, $formData, function(data) {

  // after specifying the dataType you 
  // don't need to parse is manually by $.parseJSON()
  // jQuery will parse it for you

  // $data = $.parseJSON(data); //  remove this line

  console.log(data);

}, 'json');

の構文$.post()は次のとおりです。

$.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

最後のパラメータを指定する必要がありますdataType

于 2012-08-04T04:55:04.760 に答える