2

我使用 jQuery 的 dataType 'jsonp' 从 API 中获取 JSON 字符串。操作失败,因为返回的 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

错误,因为它不喜欢“品牌”后面的冒号

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

冒号是否需要转义才能使用 jQuery 的 jsonp?任何解决方法?

谢谢

4

1 回答 1

2

我得到了你的例外,但原因不是冒号,你的 jsonp 响应格式错误(它非常大,大约 38k 个字符,在我看来它仅限于 64k 或类似的东西,所以它缺少结尾)。

它以:"size":{"id":"2"},"

" 最后是未终止的字符串文字

如果您"size":{"id":"2"}}]};只关闭它(即),那么浏览器将能够解析该 jsonp。

编辑

我可以从 chrome 得到全部响应,但它的开发工具只显示了它的一部分,我错了。将在 IE 中检查它。

编辑2

如果您在 IE 开发人员工具中检查您的响应,您会看到 jsonp 中有两次换行符,每次在 之后Brand: American Apparel,因此它会破坏字符串并且 js 无法解析 jsonp。

于 2011-11-08T11:35:06.707 回答