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でチェックします。

EDIT2

IE開発者ツールで応答を調べると、jsonpに改行が2回あり、その後は毎回あることがわかりますBrand: American Apparel。そのため、文字列が壊れ、jsはjsonpを解析できません。

于 2011-11-08T11:35:06.707 に答える