5

今日、サーバー上のPHPファイルの内容を。で取得しようとしたときに、非常に奇妙なエラーが発生しました$.get

これは、Mac OS X(Snow Leopard)のSafariとChromeでのみ発生し、Windowsではすべてのブラウザで正しく機能します。

関数は次のようなものです。

function _fc() {
   $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) {

      if (data=='0') { letItGo=true; $('#loginform').submit(); }
      else ...//Do some other checks
   });
}
  • これはローカルサーバーではなく、既存のドメインを持つWebサーバーです。
  • クロスドメインのajaxを実行しようとはしていません。両方のファイルは同じディレクトリにあります。

そのための解決策が見つかりません。

正確なエラー:

XMLHttpRequest cannot load 
http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something.
Origin http://asking1.com is not allowed by Access-Control-Allow-Origin.
4

3 に答える 3

2

あなたの答えはエラーメッセージにあります:

XMLHttpRequestを読み込めません
http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something。
Origin http://asking1.comは、Access-Control-Allow-Originでは許可されていません。

http://www.asking1.comhttp://asking1.com異なる起源であるため、これは同一生成元ポリシーに違反します。ここで6番目の例を参照してください。

コードが実際に引用符で囲まれ、相対URLを使用している場合、エラーメッセージからドキュメントがオンhttp://asking1.comになっているため、相対パスはに解決されます。これは問題http://askign1.com/_x_fc.phpありません。

コードに絶対パスが含まれている場合、それが問題です。引用符で囲まれたコードのように表示するには、削除するだけです。

コードに実際に相対パスがある場合は、少し掘り下げる必要があります。どこかで、www.asking1.comコンテンツのリクエストがから来ているとブラウザに思わせることがありasking1.comます。

于 2012-07-26T14:09:25.907 に答える
2

www技術的にはサブドメインです。したがって、あなたはに違反していsame-origin policyます。設定することでこれを解決できます

function _fc() {
   document.domain = "www.asking1.com";
   $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) {

      if (data=='0') { letItGo=true; $('#loginform').submit(); }
      else ...//Do some other checks
   });
}

または、AJAXリクエストの一部として渡すURLを完全に修飾して、同じであることを確認することもできます。

于 2012-07-26T14:10:41.437 に答える
0

私はこれをこのように行いました:

$.get("http://<?php echo $_SERVER['HTTP_HOST']; ?>/_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { (...)

君たちは最高です。ありがとうございました。

于 2012-07-26T16:56:55.443 に答える