2016-04-25 1 views
0

Я пытаюсь разобрать JSON, отправленный PHP.Ошибки при анализе недопустимого JSON, переданного с PHP на AJAX

JSON:

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

Я пытаюсь разобрать его, чтобы получить id и передать его в другую функцию JavaScript, и я постоянно вызов PHP. Когда я попытался $.ajax, $.get, $.getJSON и использовали JSON.parse и parseJSON, я получаю эту ошибку:

Uncaught SyntaxError: Unexpected token <

, так как JSON выглядит следующим образом:

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

Я попытался это исправить с помощью JSON.stringify, что вызвало эта ошибка:

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

liveHeatMap() никогда не вызывается, «Неожиданный токен <» произошел, когда я использовал parseJSON (данные) – user3505547

+0

Вам не нужно вызывать parseJSON(), потому что jQuery анализирует ответ для вас и передает полученный объект вашему обработчику успеха. (Хотя у вас должен быть 'dataType' с капиталом« T »в ваших вариантах Ajax.) Вы уверены, что test.php вернёт правильную вещь? (Если вы введете тест.php url в адресную строку браузера, что вы получаете?) – nnnnnn

ответ

0

Удалите объекты contentType и dataType в своем запросе AJAX и используйте объект (а не строку) для вашего data. В вашей функции success удалите setInterval и вручную проанализируйте строку JSON, возвращенную с помощью JSON.parse(data). Это обеспечивает максимальный контроль над данными, чтобы предотвратить jQuery от проблем (а также делает его более понятным). jQuery может мешать данным в процессе и вам нужны полные исходные данные.

Похоже, вы получаете HTML. Общие причины:

  • Ваш URL AJAX указывает на неправильном месте (и это не может показаться очевидным - попробуйте ./test.php или использовать абсолютный путь).
  • Ваш PHP не убит после эхо JSON. Замените mysql_close($link) на die(), как и при завершении скрипта, все соединения с базой данных автоматически закрываются.

Если вы все еще возникают проблемы, запустите эти команды и комментарии их вывод:

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

Огромное вам спасибо, что волшебно сработало. – user3505547

+0

@ user3505547 Это здорово! Примите ответ, чтобы другие знали, что это решение. – lerouche

Смежные вопросы