JSONP и неверный ярлык - PullRequest
2 голосов
/ 09 апреля 2009

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

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', function () {

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);
    });
};

});

это работает с обычным запросом. Json, но JSONP, которому не нравится мой код: (

Ответы [ 4 ]

11 голосов
/ 08 сентября 2009

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

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

5 голосов
/ 05 мая 2011

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

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

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

2 голосов
/ 09 апреля 2009

Положите это здесь:

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

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

0 голосов
/ 09 апреля 2009

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

...