2012-07-26 17 views
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 
    }); 
} 
  • 、それは私がすべてのクロスドメインAJAXを実行しようとしないんだけど、既存のドメイン
  • と、Webサーバの:

    機能は次のようです。両方のファイルは同じディレクトリにあります。

解決策が見つかりません。

正確なエラー:

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. 
+0

Mac OS Xでしか起こらないと言うと、あなたはクライアントOSを指しているのでしょうか? Mac OS XテストとWindowsテストで同じサーバーですか? –

+0

これらは異なるブラウザであることは知っていますが、どちらのコードでも動作しません。私のサーバはUnixベースであり、WindowsとMac OS Xでテストしています。完全なエラーです - 編集された質問 –

答えて

0

私はこれをこのようにやった:

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

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

2

あなたの答えは、エラーメッセージにある:

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.

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

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

コードに絶対パスがある場合は、それが問題です。引用符で囲まれたコードのように見えるように削除してください。

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

+0

を参照してください。OPが '$ .get'呼び出しの絶対パスを設定していた場合、 asは、相対パスを設定しています。その場合、要求をリダイレクトする.htaccessファイルがない限り、実際のドメインは決して異なることはありません。 – Gavin

+0

@Gavin:True - 引用符で囲まれたコードが正確であることを前提としています(悲しいことに、コードを編集してエラーを編集することがよくあります)。それにもかかわらず、エラーメッセージは、それがSOPのことであることは明らかです。 –

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を修飾可能性を設定することによってこの問題を解決することができます。

+0

私はそれを試してみましょう。 –

関連する問題