неверная метка Ошибка Firebug с jQuery getJSON

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

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

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

Любые идеи, почему я могу получить эту ошибку?


person jerome    schedule 12.05.2010    source источник
comment
Пожалуйста, покажите нам Javascript, обработанный запросом JSONP.   -  person SLaks    schedule 13.05.2010


Ответы (2)


Это старый пост, но я все равно отправляю ответ:

Предположим, вы хотите получить код 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». Вам нужно только убедиться, что они имеют ОДИНАКОВОЕ ИМЯ.

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

Vq.

person vq20    schedule 04.10.2010
comment
Действительно спасибо за ваш старый, но действительный ответ. Я не видел ничего из этого в документах! - person Antonio Laguna; 09.11.2011

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

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

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

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

person SLaks    schedule 12.05.2010
comment
Спецификация jQuery допускает callback=? при использовании jQuery.getJSON. Это оборачивает ответ в функцию обратного вызова. - person jerome; 13.05.2010
comment
@jerome: Да, но ваш серверный скрипт должен это поддерживать. JSONP — это не волшебство. - person SLaks; 13.05.2010
comment
спасибо за ваше понимание этого. Если у вас есть минутка, посмотрите ссылки ниже для моего тестового примера. У меня еще недостаточно информации, чтобы понять, почему междоменный запрос не позволяет мне использовать данные. thespacebetweenthewords.org/json_test/test_jsonp_request.html Запрос сделан на другой домен. недопустимая ошибка консоли метки в Firebug и невозможность использования данных. globaloperation.info/json_test/test_json_request.html Запрос выполняется в том же домене. Данные извлекаются и оцениваются правильно. - person jerome; 14.05.2010
comment
Вам нужен код на стороне сервера для вызова функции. JSONP не извлекает данные из другого домена волшебным образом; ему нужен совместимый сценарий на стороне сервера для вызова функции на основе параметра callback. См. здесь. - person SLaks; 14.05.2010