"недопустимая метка" ошибка Firebug с jQuery getJSON - PullRequest
2 голосов
/ 13 мая 2010

Я делаю запрос jQuery $.getJSON в другой домен, поэтому я проверяю, что мой GET URI заканчивается на "callback =?" (т.е. используя JSONP).

Панель NET Firebug показывает, что я получаю данные, как и ожидалось, но по какой-то причине панель консоли регистрирует следующую ошибку: «неверная метка».

JSON проверяется с помощью JSONLint , поэтому я сомневаюсь, что со структурой данных действительно что-то не так.

Есть идеи, почему я могу получить эту ошибку?

Ответы [ 2 ]

11 голосов
/ 05 октября 2010

Это старая запись, но я все равно отправляю ответ:

Предположим, вы хотите получить код jSON, сгенерированный следующим файлом «get_json_code.php»:

<?php
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
?>

Как вы упомянули, $ .getJSON () использует JSONP, когда вы добавляете "jsoncallback =?" параметр для строки требуемого URL. Например:

$.getJSON("http://mysite.com/get_json_code.php?jsoncallback=?", function(data){ 
   alert(data);
});

Однако в этом случае вы получите сообщение «недопустимая метка» в Firebug, потому что файл «get_json_code.php» не предоставляет допустимую ссылочную переменную для хранения возвращенной строки jSON. Чтобы решить эту проблему, вам нужно добавить следующий код в файл «get_json_code.php»:

<?php
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo $_GET['jsoncallback'].'('.json_encode($arr).')'; //assign resulting code to $_GET['jsoncallback].
?> 

Таким образом, полученный код JSON будет добавлен в переменную GET 'jsoncallback'.

В заключение, "jsoncallback =?" Параметр в URL-адресе $ .getJSON () выполняет две функции: 1) устанавливает функцию для использования JSONP вместо JSON и 2) указывает переменную, которая будет содержать код JSON, полученный из файла «get_json_code.php». Вам нужно только убедиться, что у них одинаковое имя.

Надеюсь, это поможет,

Уд.

3 голосов
/ 13 мая 2010

Похоже, вы неправильно используете JSONP в своем серверном скрипте.

Когда вы получаете запрос с параметром обратного вызова, вы должны отобразить следующее:

callbackName({ "myName": "myValue"});

Где callbackName - значение параметра обратного вызова.

...