アップデート
したがって、JQuery.post() 関数は有効な JSON を受け取ります。関数呼び出しの属性「json」は、元の配列を取得するのに十分であり、.parseJSON() は必要ないことを知っています。この関数を使用すると構文エラーが発生するのはそのためだと思います。
しかし、どういうわけか、 .parseJSON() なしでは配列にアクセスできません。実際、typeof(data) を使用しても、文字列のままです。コンソールに書き込むことができ、まだ有効な JSON です。
JavaScript の通常の関連付けられた配列として、配列 (元は json_encode() を介して一度エンコードされた関連付けられた PHP 配列) を使用するにはどうすればよいですか?
元の投稿
この構文エラーが何日も発生しており、気が狂いそうになっています。私はたくさんの投稿を読んでいますが、それは私が見逃している非常に単純なものに違いないことを知っています. 助けてください。前もって感謝します。
var institute = $.post("../libraries/load_content.php",
{
funct: "getInstituteAddress",
ins_name: "Institut für Informatik",
ins_city: "Kiel"
}, "json");
institute.done(function(data) {
alert(data);
var ins_data = $.parseJSON(data); // <-- throws syntax error
$("#street").empty().val(ins_data['ins_street']);
$("#number").empty().val(ins_data['ins_number']);
$("#postalcode").empty().val(ins_data['ins_postal_code']);
}, "json");
institute.fail(function(data) {
console.log("Retrieving institute data failed. Returned:"+data);
});
JQuery.post() 関数は、DB から必要なデータをフェッチし、json_encode() で連想配列を返す php スクリプトを呼び出します。
これは、この時点まで正常に機能します。
{"ins_name": "Institut für Informatik",
"ins_street": "HRSl",
"ins_number": "42",
"ins_postal_code": "24118",
"ins_city": "Kiel"}
上記で、返された文字列を警告すると、JSONLint バリデーターは有効な JSON であると通知します。
そこで、String を parseJSON() 呼び出しに直接コピーしました。うまくいきました。変数を使用しないのはなぜですか?
これが私が試したことです:
- 一重引用符/二重引用符の欠落についてよく読みます。ここでは運がありません。ストリングの周りに複数のバリエーションでそれらを追加しました。
- また、そのような環境では parseJSON 関数は必要ないということもよく読みます。だから私は関数呼び出しを落としました。もちろん、構文エラーは消えますが、JSON を通常の配列として読み取ることができないため、フィールドが空になるだけです。
- .post() 関数を .ajax() に置き換えて、不足している引数を追加しようとしました...同じ効果があります。
- dataType 属性を html または text に変更しました。再び運が悪い。