ローカルネットワークで次のjqueryコードを実行してみます。
$.ajax({
type: "GET",
url: "http://SomeSite/MyUrl/",
cache: false,
data: { ... },
dataType: "json",
error: function (xhr, status, error) {
...
},
success: function (json) {
...
});
「SomeSite」がローカルホストになるまで、すべてが正常に機能します。ページがダウンロードされたのと同じサーバーを意味します。
しかし、「SomeSite」が別の(localhostではない)ネットワークサイトである場合、リクエストがハングしたように見えます。 「エラー」も「成功」コールバック関数も呼び出されません。このコードを機能させるにはどうすればよいですか?
前もって感謝します!
「SomeSite」へのサーバーアクセス権はありますか、それともサードパーティですか?
アクセス権がある場合は、CORS
を有効にできます wp 、 home その上に。最も単純な形式(データはセッションに依存しない)で、ヘッダーを追加するだけです:Access-Control-Allow-Origin: *
アクセス権がない場合、JSONP
がサポートされているかどうかはわかりますか wp 、 so?これには通常、URLで少なくともcallback
パラメータを渡す必要があります。 (もちろん、アクセス権があれば、JSONP
サポートも追加できます。)
「SomeSite」に変更を加えるアクセス権がなく、CORS
もJSONP
もサポートしていない場合は、YQL
を使用できる可能性があります wp 、 home プロキシとして。 CORS
とJSONP
の両方をサポートし、データ形式の変換、データの一部の選択なども可能です。
(YQLはrobots.txt
したがって、自動化されたアクセスを制限しているサードパーティのサイトである場合でも、まだうまくいかない可能性があります。)
同様の問題がありました。 Symbaが引用したプロキシスクリプトを試してみましたが、何らかの理由で自分のマシンでは機能しませんでした。私の場合、同じホスト上のJBoss ASでホストされているアプリにリクエストを送信しようとしました。どういうわけか、私が持っていたJBossのバージョンには、「Access-Control-Allow-Origin」、「*」を含めることができるように応答ヘッダーを変更する方法がありませんでした。
上記のSymbaのアプローチを使用して解決しましたが、Ben Almanのスクリプトの代わりに、Apacheサーバーにリバースプロキシを設定しただけです https://www.simplified.guide/Apache/configure-reverse-proxy を参照してください。 =。デフォルトでは、Apacheには依然としてクロスドメインの問題があります。応答ヘッダー「Access-Control-Allow-Origin」、「*」を設定することにより、 http://enable-cors.org/server_Apache.html を参照してください。問題は解消されます。
あなたはjsonpリクエストを試すことができます http://api.jquery.com/jQuery.ajax/ クロスドメインを参照してください
クロスドメインjquery ajaxリクエスト をご覧ください。リモートサーバーがJSONPをサポートしている場合は、コールバックを使用できると思います。
実際には、GETのみを呼び出すことができます。
クロスサイトスクリプティングを介してPOST、PUT、DELETE、またはPATCHを呼び出すための確実な方法はありません。
実行可能な唯一の方法は、手書きのプロキシです。
同じOriginポリシーのため、これは実行できません。回避策の1つは、Flashムービーを使用して同じオリジンポリシーをバイパスするFlash AJAX jQuery plugin http://flxhr.flensed.com/ を使用することです。
他のオプションは、独自のドメインを介してリクエストをプロキシするか、JSONPを使用することです。
リソース/データをロードするサーバーにアクセスできる場合は、サーバーの応答のリクエストヘッダーを変更して、
"Access-Control-Allow-Origin"、 "*"
ブラウザーによって適用される同一生成元ポリシー(ブラウザーによって厳格度が異なることがわかっている限り)は、(部分的に?)応答ヘッダーの値に基づいています。
Webサービスからjsonを読み込もうとしたときにも同じ問題が発生しました。私が見つけたすべてのJSハッキングは実際には機能しませんでした。自分が制御している(そして信頼している)サーバーからデータをロードしたいのであれば、なぜこれをしなければならないのか疑問に思いました。次に、サーバーの応答ヘッダーがこの問題全体で重要な役割を果たすことを学びました。上記のヘッダーをWebサービスのhttp応答に追加すると、問題は解決しました。