Foursquare APIを使用して会場を検索する必要があります。もちろん、クロスドメインです。
Firefoxでは問題ありませんが、Internet Explorerでは問題ありません(テスト済みの7、8、9)。
私のjavascriptコードは次のようになります:
searchVenues: function(searchQuery) {
$.ajax({
url: 'https://api.foursquare.com/v2/venues/search',
data: {
sw: bound_south_west,
ne: bound_north_east,
query: searchQuery.query,
oauth_token: FSQ_OAUTH_TOKEN,
limit: 25,
intent: 'browse',
v: 20120206
},
cache: false,
dataType: 'json',
success: function(data) {
displayResults(data, searchQuery.query);
},
error: function(xhr, status, errorThrown) {
console.log(errorThrown+'\n'+status+'\n'+xhr.statusText);
}
});
}
Firefoxでは、受信したデータを完全に表示します。 Internet Explorerでは、コンソールにログオンします。
No Transport
Error
Error
私は何をすべきか?
これをWindows Mobile 7でテストしました。
理解するのに多くの時間を費やした後、私は最終的にこれを見つけました:
http://bugs.jquery.com/ticket/1066
ソリューションはシンプルで、これを設定するだけです:
$.support.cors = true;
そして、Ajaxクロスドメインリクエストが機能します!
jQuery.support.cors = true;
$.ajax({
crossDomain: true,
url: "",
type: "POST",
dataType: "xml",
data: soapMessage,
});
クロスドメイン値をtrueにする必要があります
この問題はしばらくの間私を悩ませてきました。回避策として、同じサイトにあるプロキシスクリプトを使用します。このようなスクリプトは、サーバー間の非ajax HTTPリクエスト(curlおよびWinHttp.WinHttpRequestを考えてください)を実行し、ステータスとデータを呼び出し元に返します。動作しますが、2つのHTTP要求を実行する必要があるため、明らかにあまり効率的ではありません。
私の場合、ソリューションは上記のすべての要素と「Access-Control-Allow-Origin」ヘッダーの組み合わせです。
$.support.cors = true; // this must precede $.ajax({}) configuration
$.ajax({
crossDomain: true, // added in jQuery 1.5
headers: {
'Access-Control-Allow-Origin': '*'
},
...
});
これらの呼び出しに応答するWebサービスは、「Access-Control-Allow-Origin:*」ヘッダーで応答します。
この解決策を試してください:
https://stackoverflow.com/a/14463975/237091
または、jqueryをインクルードした直後に、このコードをHTMLに挿入するだけです。
<!--[if lte IE 9]>
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js'></script>
<![endif]-->