2016-04-25 13 views
0

PHPから送信されたJSONを解析しようとしています。PHPからAJAXに渡された無効なJSONを解析中にエラーが発生しました

JSON:

[{"id":"1","value":"1"},{"id":"4","value":"1"},{"id":"2","value":"1"},{"id":"3","value":"1"},{"id":"4","value":"1"}] 

私はidを取得し、別のJavaScript関数に渡すためにそれを解析しようとしていると私は継続的にPHPを呼んでいます。私は原因となった、JSON.stringifyを使用して、それを修正しようとした

id: id: id: html> 1id: 4id: 1id: 2id: 3id: 4id: id: id: > 

:JSONは次のようになりますので

Uncaught SyntaxError: Unexpected token <

:私は$.ajax$.get$.getJSONJSON.parse使用してparseJSONを試したとき、私はこのエラーを取得しますこのエラー:

Cannot use 'in' operator to search for 'length' in and now I'm stuck and have no idea how to fix this.

test.php:

<?php 
    $link = mysql_connect("localhost", "root", "password"); 

    if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
    } 

    $db = mysql_select_db("example"); 

    $sql = "select * from data"; 
    $x = mysql_query($sql); 

    $emparray = array(); 
    while ($row = mysql_fetch_assoc($x)) { 
    $emparray[] = $row; 
    } 
    echo json_encode($emparray); 

    mysql_close($link); 
?> 

heatmap.html:

<script> 
     $(window).ready(function(){ 
      $.ajax({ 
      url:'test.php', 
      data:"{'id':'1', 'value':'1'}", 
      contentType: "application/json; charset=utf-8", 
      datatype: 'json', 
      success: function (data){setInterval(function(){ 
      /* if I use parseJSON(data), I get "Unexpedted token <" 
       error */ 
       $.each(data, function (id, value){ // error occures here 
       liveHeatMap(id); //Never called 
       }); 

      }, 10000)}}); 
     }); 
</script> 

私はこの問題は、JSONが無効であることだと思います。私はとても多くのことを試してみましたが、他の多くの同様の問題を見ましたが、それでも解決できません。

+0

「予期しないトークン<」エラーが発生しましたか?表示されない 'liveHeatMap()'メソッドの中で起こっているのですか?それ以前にエラーが起きたので呼び出されませんか? – nnnnnn

+0

parseJSON(data)を使用したときにliveHeatMap()が呼び出されず、 "予期しないトークン<"が発生しました – user3505547

+0

jQueryがレスポンスを解析して結果のオブジェクトを成功ハンドラに渡すため、parseJSON()を呼び出す必要はありません。 (あなたのAjaxオプションに 'dataType'を大文字の「T」で付けるべきですが)test.phpが正しいものを返すのは確かですか? (テストを入力した場合。あなたは何を得るのですか?) – nnnnnn

答えて

0

AJAXリクエストでcontentTypedataTypeのプロパティを削除し、dataにオブジェクト(文字列ではなく)を使用します。 success関数では、setIntervalを削除し、返されたJSON文字列を手動で解析します(JSON.parse(data))。これにより、jQueryが問題を引き起こすのを防ぐために、データに対する制御を最大限に確保できます(また、より明確になります)。 jQueryがプロセスのデータに干渉している可能性があり、完全な生データが必要です。

HTMLを受け取っているようです。一般的な原因は:

  • あなたのAJAX URLが正しくない場所を指している( - ./test.phpを試すか、絶対パスを使用して、それは明らかに思えないかもしれません)。
  • あなたのPHPはJSONをエコーし​​た後に殺されません。 mysql_close($link)die()に置き換えてください。スクリプトが終了すると、すべてのデータベース接続は自動的に閉じられます。それでも問題が解決しない場合は

、これらのコマンドを実行し、その出力コメント:

console.log(data); 
console.log(typeof data); 
+0

ありがとう、それは魔法のように働いた。 – user3505547

+0

@ user3505547これは素晴らしいことです!答えを受け入れることで、他者がこれが解決策であることを知ることができます。 – lerouche

関連する問題