невалиден етикет 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=?" параметър в $.getJSON() URL прави две неща: 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 позволява обратно извикване=? когато използвате 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 и не може да използва данните. globaloperative.info/json_test/test_json_request.html Заявката се прави към същия домейн. Данните се извличат и оценяват правилно. - person jerome; 14.05.2010
comment
Имате нужда от код от страна на сървъра, за да изпратите извикването на функцията. JSONP не извлича магически данни от различен домейн; той се нуждае от съвместим скрипт от страна на сървъра, за да излъчва извикване на функция въз основа на параметъра callback. Вижте тук. - person SLaks; 14.05.2010