2011-11-08 15 views
2

jQueryのデータ型 'jsonp'を使用してAPIからJSON文字列を取得します。戻り値のobjに ':'コロンが含まれている文字列が含まれているため、操作が失敗します。ここjQuery:コロンを含む文字列のためにjsonpが失敗する

検索フィドル: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が(jsonlint.comでテスト)有効なJSONであるこの、次のようになります。

{"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を使用するにはコロンをエスケープする必要がありますか? 回避策はありますか?

THX

+0

理論では、jsonは説明値を文字列として扱うので、エスケープする必要はありませんが、役立つ場合は、エスケープしてください。より良いjsonエンコード/デコード-r – Val

+0

http:// jsonを使用してください。 parser.online.fr/私にエラーはありません... –

答えて

2

私はあなたの例外を得たが、その理由は、コロンではありません、あなたのJSONP応答が不正な形式である(それは、およそ38K文字が非常に大きく、それは64Kまたはそのような何かに限定されているように私には思えます、最終的には欠けている)。

それはで終わる:最後に"size":{"id":"2"},"

は、「あなたは(すなわち"size":{"id":"2"}}]};)それを閉じたい場合にのみ、ブラウザがそのJSONPを解析することができるだろう終端されていない文字列リテラル

ある

。 EDIT

私はクロムから全面的な反応を得ることができますが、その開発ツールはその一部だけを表示しています。私は間違っていました。IEでチェックします。

EDIT2

あなたがIEの開発ツールで、あなたの応答を検査した場合、あなたは、二回JSONPでBrand: American Apparel後のたびに改行を持っているので、それは文字列とJSがJSONPを解析することはできません破ることがわかります。

+0

jsonオブジェクトはjqueryのサイズ(サイズ)に幾分かと思います...私は '$ .ajax'とその設定についてdocuを検索しましたが、しました対応するものを見つけられません... –

+0

'newline twice'はどういう意味ですか? – ezmilhouse

+0

jsonpレスポンスの2つの場所で:最初は 'American Apparel'の後にchar 81633を、もう一度 'American Apparel'の後にchar 90656を付けてください。これらを削除して(\ r \ n)、もう一度やり直してください。 –

関連する問題