2012-04-24 9 views
1

次のような状況があります。あるアプリケーションからjqueryを使用したサブドメインhtmlページ

https://subdomain.mydomain.com私はhttps://mydomain.com/page.aspx

Iに位置してページの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 devのツールやFirebugの)からIは、応答ステータスが200 OKであることがわかり、それが予想されるサイズ(80キロバイト)が、応答内容を持っています

(XDomainRequestを通して)IEとFirefoxは同じ動作をします空です。 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アプリケーションでした。以下のウェブサイトは、多くのサーバタイプにenable CORSに多くの設定を報告し

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

答えて

3

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

+0

それは働いた!私はちょうど正しいサーバー構成に追加しなければなりませんでした。このリンクは私を大いに助けました http://enable-cors.org/ ありがとうございました! – abx78

1

使用JSONPデータ

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

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

問題を得るために:私は、web.configファイルにこれらの行を追加する必要がありました別のドメインからXHR要求を出そうとしていることです。これは許可されていません。あなたはCORSを許可するようにjQueryに指示しましたが、JSONPはこれを行うためのより良い方法です。 URLがロードされたときに呼び出される関数でラップされたJSONデータのhtmlを返すようにサーバー側のコードを設定する必要があります。

+0

を十分でしょう。ご協力ありがとうございました! – abx78

+0

それは非常に理解できます。私は最近非常に似た問題のプロジェクトを持っていました。 '?callback = xxx'クエリ文字列をリッスンし、プレーンなHTMLレスポンスではなくJSON変数のHTMLをすべて返すようにサーバー側コードを設定しました。私は私の答えでそれを言及すべきだったと思う。 – honyovk

0

として、簡単なjavascriptのは、私は、既存のJSONサービスに直面しているとき、私は、このオプションを検討します

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); 
関連する問題