2012-03-11 6 views
0

を使用して、無効なJSONファイルを要求します。それは外部サーバー上にあります。 Firebugは、& &文字を指す構文エラーを返します。は、私は、無効な構造を有しているJSONファイルを要求していますJSONP

この無効なJSONを取得するにはどうすればよいですか?

マイスクリプト:あなたはそれの前に来&&、何を削除するよう

<script src="jquery.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() {  
$.ajax({ 
url:"http://different-domain.com", 
dataType: 'JSONP', 
success: parseJSON 
function parseJSON(data){ 
// do stuff with json 
} 
}); 
</script> 
+1

最初に無効なJSONが表示されるのはなぜですか?あなたはそれを変えるために何もできませんか? –

+0

有効な 'json'を返すことができない場合は、なぜ' jsonp'データ型を強制しようとしますか?単にajaxリクエストにデータ型は言及しないでください。それはデータをフェッチしますが、もちろん、それを 'json'オブジェクトとして消費することはできません。 – Nikhil

+0

@NikhilPatil - ドメイン間のリクエストを発行するにはJSONPが必要です。 – maxedison

答えて

1

completesuccessではなく使用できます。あなたはエラーが来る前にRAW応答を得ることができます。次に、解析されていない無効な文字をsubstrできます。

$.ajax({ 
url:"http://different-domain.com", 
dataType: 'JSONP', 
complete: function(xhr){ 

    var raw= xhr.responseText 
     , json 
     , err 
     ; 

    while(raw.length && err) 
    { 
     // rewind state 
     err= false; 
     try { 
     //parse JSON 
     json= parseJSON(raw); 
     } 
     catch (e) 
     { 
     // Mark loop as invalid 
     err= true; 
     } 

     // Get out if json is valid and parsed 
     if (!err) break; 

     // If loop is not broken try another one time: cut one char from invalid json and go on. 
     raw= raw.substr(1); 
    } 

    if (!err) 
    { 
     console.log('YAPPPEEEEE :)'); 
    } 
    else 
    { 
     console.log('NOPE :('); 
    } 
} 
+0

ありがとうございます、しかし、ファイヤーバグは「未定義は未定義です」と言っていますか? – Lukas

+0

そしてxhr.responseText? console.log(xhr.responseText)は何を返しますか? –

+0

console.log(xhr.responseText)は "undefined"を返します。 – Lukas

0

が見えます。これは常にそうであると仮定すると、$.ajax()方法のsuccessハンドラで、次の操作を行います。

succes: function(data){ 
    var goodJSON = data.slice(4); 
    var myObject = $.parseJSON(goodJSON); 
} 

myObjectは完全に解析されたJSONを開催します。

+0

JSONPリクエストに問題があるのでエラーが発生していません – Lukas

2

接頭辞{}&&接頭語は、停止の外部の誰でも、データにアクセスできないように正確に設計されています。バックグラウンドについては、this questionを参照してください。

外部インターフェイスを同じ発信元ポリシーの外部から操作できるようにするには、different-domain.comを取得してJSONPコールバックインターフェイスをサポートするようにスクリプトを変更する必要があります。

関連する問題