2

この質問にある Web サービスを使用して、フィードを検証しようとしています。

しかし、ブラウザでは ajax GET リクエストを別のサーバーに送信できません。また、その Web サービスには各リクエストごとに 1 秒の制限があるため、サーバーからのリクエストをミラーリングできません。

これは私の現在のjQueryコードです:

var reqUrl = "http://validator.w3.org/feed/check.cgi?url=" + encodeURIComponent(theUrl);
$.get(reqUrl, function(data) {
    // do something
});

他に方法はありませんか?

4

4 に答える 4

2

私はグーグルを検索し、これを見つけまし。3番目の答えは次のように述べています。

コンピューティングでは、同一生成元ポリシーは、JavaScriptなどの多くのブラウザー側プログラミング言語にとって重要なセキュリティ概念です。このポリシーは、同じサイトから発信されたページで実行されているスクリプトが、特定の制限なしに互いのメソッドとプロパティにアクセスすることを許可しますが、異なるサイトのページ間でほとんどのメソッドとプロパティにアクセスすることを防ぎます。(ソース)

この質問の答えを見た方がいいでしょう。

W3Cスクリプトにアクセスできないため、JSONPを使用できないと思います。

更新(説明)

私がリンクした質問は、あなたにそれを説明することができる別の方法があります。答えが言ったようにAccess-Control-Allow-Originヘッダーをに設定すると、別のドメインにリクエストを送信できます。*MVCアプリケーションで簡単に使用できるように、このソリューションを確認できます。幸運を

Update2

http://validator.w3.org/あなただけを許可するにはAccess-Control-Allow-Originhttp://validator.w3.org/

答えが言ったように詳細についてはここに行きます

于 2012-08-17T00:28:18.277 に答える
2

JSONPを使用しない限り、Ajax呼び出しは異なるドメイン間では無効です。JQuery-ajax-cross-domainも同様の質問であり、洞察を得ることができます。また、コメントでルイスが指摘しているように、JSONPはデータを取得するドメインにも実装する必要があります。

これはjqueryajax()の例ですが、 $。getJSON()を調べることをお勧めします。

$.ajax({
    url: 'http://yourUrl?callback=?',
    dataType: 'jsonp',
    success: processJSON
});

もう1つのオプションはCORS(Cross Origin Resource Sharing)ですが、これには他のサーバーがCORSを有効にする必要がありますが、この場合はほとんど発生しません。

于 2012-08-17T00:28:19.347 に答える
1

前述のように、JSONPを使用できますが、エンドポイントもそれを実装する必要があります。また、呼び出しからjsonデータを要求する場合にのみ使用されます。HTMLを取得しているようです。

ドメインに、外部の場所からデータをプルしてajax呼び出しに提供する単純なプロキシを実装することもできます。たとえばCURLを使用して、phpで単純なプロキシを開発できます。

このセキュリティの意味を理解していることを確認してください。たとえば、プロキシを保護して、その外部URL(ホワイトリスト)のみを呼び出すようにしてください。

更新:プロキシソリューションを使用できないことに気づきました。そして、あなたが提案したリンクをたどった後、私はイベントで知らなかったCORSに出くわしました。したがって、明らかに、ドメイン内のページを提供しているときに、いくつかのドメインへの要求を実行できるようにブラウザに指示するヘッダーを設定できます。

実装方法については、次のページを確認してください。

http://enable-cors.org/

IEで動作させるには少し調整する必要があるかもしれないと読みましたが、現在すべてのブラウザで実装されているようです。

于 2012-08-17T00:35:31.953 に答える
0

これは古い質問であることは知っていますが、私自身もvalidator.w3.orgへのAJAXリクエストを作成しようとしており、まったく同じ問題に遭遇し、このSOの質問に遭遇しました。

しかし、私は解決策を見つけました。

人々がすでに述べたように、ここでの主な問題は、サーバーが有効な CORS ヘッダーを発行する必要があることです。

Access-Control-Allow-Origin: *

Fiddler を使用して、validator.w3.org からの応答ヘッダーを確認しましたが、ヘッダーが設定されていませんでした。ただし、validator.w3.org/nu/ には別のツールもあります。

以下に例を示します: http://codepen.io/DDN-Shep/pen/ogdGgO/

$('form').on('submit', function(e) {
  e.preventDefault();

  var data = new FormData(this);

  $.ajax({
    url: 'http://validator.w3.org/nu/', // Trailing '/' is important or you get a 301 HTTP response status code
    type: 'POST',
    data: data,
    processData: false, // Required for jQuery & FormData
    contentType: false, // Set by FormData, required by the server
    success: function(data, status, xhr) { /* TODO */ },
    error: function(xhr, status, error) { /* TODO */ },
    complete: function(xhr, status) { /* TODO */ }
  });
});

サーバーが CORS を許可しているかどうかわからない場合は、この非常に便利なオンライン ツールを使用できます。

test-cors.org = http://client.cors-api.appspot.com/client

于 2015-02-25T14:59:49.550 に答える