1

私は次のような状況にあります。

https://subdomain.mydomain.comにあるアプリケーションからhttps://mydomain.com/page.aspxにあるページのhtmlを取得しようとしています

私はこれをjquery $.ajaxメソッドで行っています。

    $.ajax({
        url: url,
        type: 'GET',
        contentType: 'application/x-www-form-urlencoded',
        success: function (data, status, xhr) {
            console.info("success");
        },
        error: function (xhr, status, error) {
            console.error(error);
        }
    });

aspxページは実際に呼び出され、実行されます。

IE(XDomainRequest経由)とFirefoxの動作は同じです。インスペクター(IE開発ツールとFirebug)から、応答ステータスは200 OKで、予想サイズ(80KB)ですが、応答コンテンツは空です。jQueryエラーはそれほど有用ではありません:

    readyState: 0,  
    responseText: ""
    status: 0,
    statusText: "error"

同一生成元ポリシーに関係していると思います。YQL(ただし、追加のライブラリは使用したくない)とJSONP(ただし、プレーンHTMLを使用しています)でこの種の問題を解決している人がいます。

必死の瞬間に私は次のようなトリックも試しました

    document.domain = 'mydomain.com';
    jQuery.support.cors = true;

失敗。ヒントはありますか?


この問題はAccess-Control-Allow-Origin、呼び出されたアプリケーションで有効にする必要があることが原因でした。私の場合、それはIIS7ホスティングのasp.netアプリケーションでした。web.configに次の行を追加する必要がありました。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>

次のWebサイトは、多くのサーバータイプでCORSを有効にするための多くの構成を報告しています

4

3 に答える 3

3

IEまたはFFのクロスオリジンリクエストを使用するには、サーバー側を調整してAccess-Control-Allow-Origin、レスポンスとともにヘッダーを送信する必要があります。また、使用する場合document.domainは、要求側だけでなく、応答側にも設定する必要があります。したがって、iframeを使用してそのようなリクエストを送信したり、SCRIPTまたはJSONPを使用したりできます。これらにはクロスオリジンの制限がないためです。

于 2012-04-24T17:42:25.527 に答える
1

JSONPを使用してデータを取得する

function myFunc() {
    console.info("success");
}

$.ajax({
    url: url,
    'dataType': "jsonp",
    'jsonp': "callback",
    'jsonpCallback': "myFunc"
});

問題は、許可されていない別のドメインからXHRリクエストを作成しようとしていることです。jQueryにCORSを許可するように指示しましたが、これを行うにはJSONPの方が適しています。URLが読み込まれるときに呼び出される関数でラップされたJSONデータのhtmlを返すように、サーバー側のコードを設定する必要があります。

于 2012-04-24T17:32:37.823 に答える
0

単純なJavaScriptで十分です

alert(document.domain);

console.log("Output;");  
console.log(location.hostname);
console.log(document.domain);
alert(window.location.hostname)

console.log("document.URL : "+document.URL);
console.log("document.location.href : "+document.location.href);
console.log("document.location.origin : "+document.location.origin);
console.log("document.location.hostname : "+document.location.hostname);
console.log("document.location.host : "+document.location.host);
console.log("document.location.pathname : "+document.location.pathname);
于 2016-06-03T12:51:26.983 に答える