1

別のページで完全に機能するコードを含むページでエラーが発生します...これは次のとおりです。

$.each(json,function(index,element){
var tr = $("<tr>").appendTo($tabbody);
$(tr).append('<td><a target="_blank" href="forum.php?t='+element.topic_id+'">'+element.topic_nom+"</a></td>"+'<td>'+element.date_heure+"</td>");
});

jsonは、phpページでのGETリクエストの結果です。

$data = $query->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($data);

結果の例:

[
    {
    "topic_nom": "Deuxième question de linterro manip 5",
    "topic_id": "1",
    "user_nick": "Symael",
    "user_id": "1",
    "msg_id": "10",
    "date_heure": "2013-02-17 18:28:04"
    },
    {
    "topic_nom": "Quel est le sens de la vie ?",
    "topic_id": "2",
    "user_nick": "Symael",
    "user_id": "1",
    "msg_id": "10",
    "date_heure": "2013-02-17 18:28:04"
    }
]

どちらが有効なJsonです...私が得るエラーは次のとおりです。

TypeError: invalid 'in' operand e
...ute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r...

そして、$。parseJSON(json);を試してみると :

SyntaxError: JSON.parse: unexpected character
...ute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r...

http://jsonlint.com/でJsonを検証すると、結果は次のようになります。

Parse error on line 1:
[    {        "to
^
Expecting '{', '['

そして、最初の[を手動で書き直すと、突然有効になります。私はここで非常に奇妙なグリッチの犠牲者だと思います、誰かが私を助けることができますか?Oo


これが解決策です。説明についてはStoiveの回答を参照してください。

  obj = $.parseJSON(json.trim());
    $.each(obj,function(index,element){
      var tr = $("<tr>").appendTo($tabbody);
      $(tr).append('<td><a target="_blank" href="forum.php?t='+element.topic_id+'">'+element.topic_nom+"</a></td>"+'<td>'+element.date_heure+"</td>");
    });
4

1 に答える 1

4

多くの場合、メモ帳などのエディタで保存されたファイルにバイト オーダー マークが入り込むことがあります。

json位置 0 の文字コードとconsole.log結果を取得してみてください。

console.log(json.charCodeAt(0).toString(16));

5bのようなものではなく、結果として得られるはずですfeff。その場合はJSON.parse(json.trim())、目に見えない空白文字を削除することで解決できます。

于 2013-02-18T00:52:05.830 に答える