1

別のドメインのページを呼び出すことになっている次の ajax 呼び出しがあります。

if ($.browser.msie && window.XDomainRequest) {

            // Use Microsoft XDR
            var xdr = new XDomainRequest();
            xdr.open("post", "https://different-domain.aspx");
            xdr.onload = function() {
                alert(xdr.responseText);// XDomainRequest doesn't provide responseXml, so if you need it:                       

            };
            xdr.onerror = function() {
                alert("Error " + xdr.responseText);
            };
            xdr.onprogress = function() {
                alert('errored out');
            };

            var params = "fileName="+ file+"&param02="+ param02+"&param03="+ param03+"&param05="+ param05+"&param08="+ param08+"&param11="+ param11;
            alert(params);
            xdr.send(params);
        } 

onerror メソッドのコード セクションが実行されますが、xdr.responseText は空です。誰かが私が間違っている可能性があることを指摘できますか?

別のドメインで ajax ページを呼び出そうとしています。ショートカットの 1 つは、インターネット セキュリティ設定を [異なるドメイン間で許可する] に変更することですが、ユーザーにそうするように指示したくありません。

4

1 に答える 1

1

現在のドメインとは異なるドメインへの AJAX リクエストを作成することが許可されていない Same-Origin-Policy に遭遇していると思います。これを回避する方法があります。JSONPプロキシとして使用するか、可能であれば使用するサーバー側スクリプトを作成できます(リモート サーバーが適切に設定されている必要があります) JSONP

質問に jQuery のタグを付けたので、jQuery フレームワーク内でこれを行う方法の例を示します (これは jQuery を使用する主な理由の 1 つであり、AJAX をシンプルにします)。

$.ajax({
    url      :  <url>,
    type     : 'post',
    dataType : 'jsonp',
    success  : function (serverResponse) {},
    error    : function (jqXHR, textStatus, errorThrown) {}
});

これはJSONP、クロスドメイン リクエストを実行するために使用されます。

データ型: 'jsonp'

JSONP を使用して JSON ブロックに読み込みます。「?callback=?」を追加します。URL の末尾に追加して、コールバックを指定します。キャッシュ オプションが true に設定されていない限り、クエリ文字列パラメーター "_=[TIMESTAMP]" を URL に追加してキャッシュを無効にします。のドキュメント$.ajax():

ソース: http://api.jquery.com/jquery.ajax

jQuery 経由で AJAX リクエストを作成する際に設定できるオプションは他にもたくさんあります。ドキュメントをチェックして、すべてを確認してください。

于 2012-02-21T22:10:09.617 に答える