Задать вопрос
@The_XXI

Ошибка Uncaught SyntaxError: Unexpected token — как исправить?

Вот такая ошибка: Uncaught SyntaxError: Unexpected token о in JSON at position 0
at JSON.parse ()
at XMLHttpRequest.xmlhttp.onreadystatechange (messages?id=3:63)

Код:
<script type="text/javascript">
      var array = new Array();
        function getXmlHttp() {
          var xmlhttp;
          try {
            xmlhttp = new ActiveXObject("Msxm12.XMLHHTP");
          } catch (e) {
            try {
              xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (E) {
              xmlhttp = false;
            }
          }
          if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
            xmlhttp = new XMLHttpRequest();
          }
          return xmlhttp;
        }

      function chat() {
        var xmlhttp = getXmlHttp(); // Создаём объект XMLHTTP
        var did = document.getElementById('did').value;
            xmlhttp.open('POST', 'modules/msg/functions.php', true); // Открываем асинхронное соединение
            xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Отправляем кодировку
            xmlhttp.send('update=1' + '&did=' + encodeURIComponent(did));

            xmlhttp.onreadystatechange = function() { // Ждём ответа от сервера
                if (xmlhttp.readyState == 4) { // Ответ пришёл
                    if(xmlhttp.status == 200) { // Сервер вернул код 200 (что хорошо)
                  var response = xmlhttp.responseText;
                  response = JSON.parse(response);
                  if (array.length == response.length) return;
                  var start = array.length;
                  array = response;
                  var messages = document.getElementById('chat').innerHTML;
                  for (i = start; i < array.length; i++) {
                    messages = messages + '<b>' + array[i].name + ':</b>' + array[i].message + '<br />'
                  }
                  document.getElementById('chat').innerHTML = messages;
                        document.getElementById('chat').scrollTop = 1000;
                }
              }
            }
            setTimeout('chat()', 1000);
      }

      function addMessage() {
        var xmlhttp = getXmlHttp(); // Создаём объект XMLHTTP

        var did = document.getElementById('did').value;
        var message = document.getElementById('message').value;
        var xmlhttp = getXmlHttp(); // Создаём объект XMLHTTP
            xmlhttp.open('POST', 'modules/msg/functions.php', true); // Открываем асинхронное соединение
            xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Отправляем кодировку
            xmlhttp.send('did=' + encodeURIComponent(did) + '&message=' + encodeURIComponent(message));
      }
    </script>


Код functions.php:
<?php require_once ($_SERVER['DOCUMENT_ROOT']."/engine/engine.php");
    // функция отправки сообщения и загрузки сообщения в файл
    if(isset($_POST["message"])) {
    	$id = $id_user;
        $did = $_POST["did"];
    	$message = $_POST["message"];
    	file_put_contents("messages.txt", file_get_contents("messages.txt")."\n$did;$id;$message");
    	
    } elseif (isset($_POST["update"])) { // функция извлечения сообщений из txt файла

    	$string = file_get_contents("messages.txt");
        $did = $_POST["did"];
    	$array = explode("\n", $string);
    	$result = array();
        $j = '0';
    	for ($i=0;$i<count($array);$i++) {
    		$temp = explode(";", $array[$i]);
            if ($temp[0] == $did) {
            $temp[1] = loginfromid ( $temp[1] );
    		$result[$j]["name"] = $temp[1];
    		$result[$j]["message"] = $temp[2];
            $j++;
        }
    	}

    	echo json_encode($result);
    }

 ?>


Подскажите, как исправить ошибку
  • Вопрос задан
  • 985 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@choupa
Архитектор (обычный, который строит)
Очевидно, что корявый json приходит. Выведите в консоль xmlhttp.responseText и посмотрите его либо глазами, либо каким-нибудь онлайн парсером, который покажет, где ошибка.

UPD:
И вообще:
var response = xmlhttp.responseText;
response = JSON.parse(response);

почему не:
var response =  JSON.parse( xmlhttp.responseText );
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы