5

クロスドメインAJAXリクエスト(jQuery 1.7.2を使用して作成)は、リクエストdataTypeが「jsonp」または「script」に設定されていない限り、IE9では実行されません。

この問題は、応答を気にせず、dataTypeを指定しないままにしたリクエストのフレーミングで発見しました(はい、応答を気にする必要があることはわかっています)。

したがって、たとえば、これは機能します。

$.ajax({
    url: "http://www.google.com",
    type: "GET", // or "POST"
    dataType: 'jsonp'
});

しかし、これはしません:

$.ajax({
    url: "http://www.google.com",
    type: "GET" // or "POST"
});

「動作」とは、FirebugまたはF12で行われたHTTPリクエストを確認することを意味します。

どちらのリクエストも他のブラウザで機能します。設定jQuery.support.cors = true;は成功に影響しません。また、crossDomainをtrueに設定したり、キャッシュをfalseに設定したりすることもありません(AJAXリクエストで)。

AJAXリクエストの成功が、IEだけでリクエストされたdataTypeに依存する必要があるのはなぜですか?返されたデータを処理する能力に影響を与える理由を理解できます。また、一部のサーバーが特定のdataTypeに対するすべての要求を拒否する可能性があることも理解しています(ただし、ここではそうではないようです)。

4

3 に答える 3

1

これはデータ型の問題ではありませんが、サーバーが本当にこのクエリに応答したいことをブラウザで明確に確認することです。

JSONPを課すことにより、サーバーに非常に具体的な回答(メソッド呼び出しを含む)を強制します。

現在、他の解決策があることに注意してください。サーバー上で特定のヘッダーを設定できます(https://developer.mozilla.org/en-US/docs/HTTP_access_controlを参照) 。

于 2012-08-21T15:55:28.087 に答える
0

ページをリロードせずにフォームの投稿を処理するためにクロスドメインajax呼び出しを実行している場合は、データ型を「スクリプト」に設定するとうまくいきました。

これがなぜであるかについてもっと学ぶために、私は情報への信頼できるリンクに非常に興味があります。IE9以外のすべてのブラウザが機能している理由がわからないまま、数日間髪を抜いた。

ヘッダーを挿入した後でも@dystroyを使用すると、FFは機能しますが、スクリプトデータ型を使用するまでIE9では違いはありませんでした。

于 2012-11-06T18:41:31.413 に答える
-2

そのために長いスクリプトを書く必要はありません。以下にこのコードを追加するだけで、魔法を見ることができます。

$(document).ready(function(){
jQuery.support.cors = true;
// call your other functions below.....
})
于 2013-06-24T10:21:20.567 に答える