3

みなさん、こんにちは。

私はAJAXの初心者ですが、JQuery1.4.4とjquery.form.jsAJAXプラグインを使用した同一生成元ポリシーの保護に問題があります。

訪問者がURLの前に「www」を入力する限り正常に機能するAJAX連絡フォームがあります。しかし、(wwwを使用せずに)私のサイトに移動した場合でも、URLは正常に解決されますが、URLはAJAXフォームで使用しているものと一致しません。Chromeでは、これによりコンソールエラーが発生します。

「XMLHttpRequestはhttp://www.example.com/をロードできません。Originhttp://example.comはAccess-Control-Allow-Originで許可されていません。」

そしてIE8では「アクセスが拒否されました」と表示されます。したがって、URLは「www」の有無にかかわらず問題なく解決されますが、訪問者が「www」で始まると、私のAJAXフォームは機能しません。AJAXフォームコードを変更してhttp://example.com( "www"なし)に投稿すると、訪問者がwww.example.comに移動しても機能しません。コードにどちらの条件も処理させる方法が思いつかない。これは、JQueryを使用しているかどうかに関係なく、ほぼすべての人がAJAXを使用している人に遭遇する問題である必要があります。だから私は明らかな何かを見逃しているに違いありません。誰かがこれについて私に教えてもらえますか?私のテストコードは以下の通りです。

ありがとう、

ノースク

<!DOCTYPE html> 
<html>
<head> 
<meta charset="utf-8"> 
<title>ajaxForm Error Test</title> 
<script src="http://www.example.com/js/jquery-1.4.4.min.js"></script> 
<script src="http://www.example.com/js/jquery.form.js"></script>    
</head> 
<body>
<form id="contact-form" method="post" action="http://this-url-wont-be-used.com/">
<a href="#" id="contact-button">SEND</a>
</form>
<script>
//
// hook up the form to ajax
//
$('#contact-form').ajaxForm({
    url: 'http://www.example.com/', // forcing the URL doesn't seem to help!
    success: function(data) {
        alert(data);
    },
    dataType: 'html'
});
//
// make the SEND link behave as if it's a submit button
//
$('#contact-button').click(function(e) {
  $('#contact-form').submit();
});
</script>
</body>
</html>
4

2 に答える 2

2

ドメインwww.xyz.comとドメインxyz.comは同じではないため、JavascriptファイルにURLをハードコーディングしている場合は、このエラーが発生します。

簡単な答えは、完全なURLではなく相対URLを使用することです。実際のURLは表示されないため、例を示すことはできませんが、ドメインが http://www.xyz.comであり、フォームをURL http://www に投稿する必要があるとします 。 .xyz.com / admin / form /

javaScriptでは、使用するURLは/ admin/formです。

そうすれば、訪問者がサイトにアクセスするためにどのURLを使用しても機能し、クロスドメインスクリプティングエラーが発生することはありません。

もちろん、サイトが公開されている場合は、おそらく(永続的に)xyz.comサイトをwww.xyz.comサイトにリダイレクトする必要があります。Googleや他の検索エンジンは、これら2つを異なるドメインと見なし、ページランクが2つのドメインに分割されるためです。

于 2011-01-29T03:46:36.287 に答える
0

URLに相対パスを使用してみてくださいurl: '/',

于 2011-01-29T03:27:12.257 に答える