2011-07-06 15 views
1

私はJquery 1.6.2を使用しています。JQUERY JSONP問題

$.getJSON("http://b.webvm.net/?jsoncallback=?", 
    function(data) { 
     alert("OK"); 
    }); 
}); 

をしかし、これはそうではない:

これは動作します

$.getJSON("http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=?", 
    function(data){ 
     alert("OK"); 
    }); 
}); 

どちらリモートのファイルが同じに見える:

http://b.webvm.net/?jsoncallback=?

http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=?

ただし、警告メッセージは2番目の例では発生しません。他のリンクが行うよう

答えて

5

テキストファイルには、コールバック関数を提供していません。 jQueryは実際にhttp://b.webvm.net/?jsoncallback=を呼び出していませんか?しかし、その後、今度はあなたのスクリプト内でその関数を呼び出すhttp://b.webvm.net/?jsoncallback=jQuery2239203480932480392849032809などの代わりに何か:jQueryの

({"name" : "hello world"}); 
を返す http://isp123.co.uk/cw/NorthWales/test.txt?jsoncallback=jQuery2239203480932480392849032809コールバック関数を追加した場合でも

jQuery2239203480932480392849032809({"name" : "hello world"}); 

テキストファイル一方では、任意の関数を呼び出すことはありません。

は、この問題を解決するには、あなたが、その後で、あなたのJSONを包むだろう静的関数を使用するjQueryのを強制するために、あなたのAjaxリクエストでjsonpCallbackパラメータを使用することができます。例えば

を設定した場合「mycallback」にjsonpCallback、その後、テキストファイルを返す必要があります:

mycallback({"name" : "hello world"}); 
0

私は最初の例は、MIMEタイプ「text/htmlの」と返されている第二は、「text/plainの」と返されていることに気付きます。あなたのブラウザは "text/plain" MIMEタイプを正しく解釈しないかもしれません。 2番目のものをtext/htmlまたはapplication/jsonとして返すようにしてください。