jQuery: сбой jsonp из-за строк, содержащих двоеточия - PullRequest
2 голосов
/ 08 ноября 2011

Я получаю строку JSON из API, используя тип данных jQuery 'jsonp'.Операция завершается неудачно, потому что возвращающий объект obj содержит строки с двоеточиями ':'.

Найти скрипку здесь: http://jsfiddle.net/ezmilhouse/vZjV4/1/

var url = 'http://api.spreadshirt.com/api/v1/shops/329852/articles?fullData=true&locale=us_US&offset=0&attributeSet=staticShop&mediaType=jsonp';

$.ajax({
  cache: false,
  callback: "callback",
  dataType: 'jsonp',
  pageCache: false,
  url: url,
  callbackParameter: "callback",
  success: function(data, status, jqXHR) {
    console.log(data);  
}});

Возвращающийся объект obj выглядит следующим образом, который действителенJSON (протестировано с jsonlint.com):

{"articles": [
    {
        "name": "Honoring Generations of Mothers - Youth TShirt",
        "description": "t-shirt for women, Brand: ALO"
    }
]}

Но jQuery выдает ошибку

unterminated string literal

, потому что ему не нравится двоеточие после 'Brand'

"description": "t-shirt for women, Brand: ALO" // colon causes error

Нужно ли экранировать двоеточия для работы с jsonp jQuery?Есть обходные пути?

thx

1 Ответ

2 голосов
/ 08 ноября 2011

Я получил ваше исключение, но причина не в двоеточии, ваш ответ jsonp искажен (он очень большой, около 38k символов, и мне кажется, что он ограничен 64k или чем-то в этом роде, поэтому он пропускает конец ).

Окончание: "size":{"id":"2"},"

"в конце есть неопределенный строковый литерал

Если вы закроете его (т.е. "size":{"id":"2"}}]};) только тогда, браузер сможет проанализировать этот jsonp.

EDIT

Я могу получить полный ответ от Chrome, но его инструменты разработки показывают только его часть, я был не прав. Проверим это в IE.

EDIT2

Если вы проверите свой ответ в инструментах разработчика IE, вы увидите, что у вас есть новая строка в jsonp дважды, каждый раз после Brand: American Apparel, поэтому она разрывает строку и js не может проанализировать jsonp.

...