JSONP и неверный ярлык

Используя mootools и JsonP, я получаю сообщение об ошибке «недопустимая метка» в консоли ошибок Firefox.

JsonP вроде работает (данные получаю правильно)

{"jsondata":[{"title":"title1","link":"http://xxxx.xxx.xxx","thumbsrc":"http://xxxx.xxx.xxx/17_t.jpg" ,"description":".......","pubDate":"2009-03-09 06:26:00",},{"title":"title2","link":"http://xxxx.xxx.xxx","thumbsrc":"http://xxxx.xxx.xxx/16_t.jpg" ,"description":".......","pubDate":"2009-03-09 06:08:09",}]}

но я получаю сообщение об ошибке "Недопустимая метка" в "jsondata"

тот же файл хорошо работает с request.json


запятая удалена... ничего

это код, который я использую

window.addEvent('domready', функция() {

var gallery = $('gallery'); 

new JsonP('http://myjsoncodeurl',{
        onComplete: function(jsonObj) {
            addImages(jsonObj.jsondata);
        }
    }).request();

var addImages = function(images) {
    images.each(function(image) {
        var el = new Element('div', {'class': 'item'});
        var name = new Element('h3').inject(el);
        var a1 = new Element('a', {'href': image.link,'html': image.title}).inject(name);                       
        var desc = new Element('span', {'html': image.description}).inject(name, 'after');
        var a2 = new Element('a', {'href': image.link}).inject(desc,'after');               
        var img = new Element('img', {'src': image.thumbsrc}).inject(a2);
        el.inject(gallery);
    });
};

});

он работает с обычным request.Json, но JSONP, который не любит мой код :(


person Community    schedule 09.04.2009    source источник
comment
Связанное обсуждение здесь: stackoverflow.com/questions/1051196/   -  person friism    schedule 10.09.2010


Ответы (4)


тот же файл хорошо работает с request.json

С JSONP ваш ответ должен возвращать вызов функции JavaScript (то есть обратный вызов) с данными JSON, переданными в качестве аргумента. Если ваш ответ представляет собой простой старый текст JSON, он не будет работать в контексте JSONP. Вы должны настроить свой сервер так, чтобы он принимал аргумент обратного вызова и вызывал этот обратный вызов с данными JSON.

person Ates Goral    schedule 08.09.2009
comment
Можете ли вы привести какой-либо пример/ссылку? - person Bhushan; 03.05.2012
comment
@Ученик <script>callback({ a: 42 });</script> - person Ates Goral; 03.05.2012

Вам нужно поместить скобки (обычные, а не фигурные) вокруг вашего объекта, потому что иногда Javascript ужасно путается и думает, что вы делаете оператор метки, тип оператора, о существовании которого я не знал, пока не погуглил эту проблему.

https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Statements#label_Statement

Попробуйте вместо этого передать свой объект {"jsondata":[ ... ]} как ({"jsondata":[ ... ]}). Кажется, это сортирует его.

person Mikey C    schedule 05.05.2011

Вставляем сюда:

http://json.parser.online.fr/

Показывает, что он действителен, но имеет лишнюю запятую (которая не работает в IE, хотя FF должен с этим справиться). Если удаление запятой не помогло, вам нужно опубликовать дополнительный код, чтобы помочь нам найти ошибку.

person jvenema    schedule 09.04.2009

Это может быть из-за лишних запятых после дат

person Maurice Perry    schedule 09.04.2009