2

私のサイトは public_html ディレクトリと、すべての PHP スクリプトを含むプライベート サイドの /home ディレクトリに分割されています。

jQuery の .ajax リクエストを利用して、public_html ディレクトリ外の PHP スクリプトにアクセスしようとしていますが、うまくいきません。AJAX リクエストがドメイン外のリクエストを許可しないことは理解していますが、実際にはドメイン内にあるため、リクエストの正当性を AJAX に「納得させる」方法はありますか?

私の現在のコード:

$.ajax({
    type: "GET",
    url: "/path/to/script",
    success: function(resp){
        alert(resp);
    },
    error: function(){
        alert('%$!@');
    }
});

www ルート ディレクトリよりも深いディレクトリにあるこれらのスクリプトにアクセスできるようにするにはどうすればよいでしょうか。一定のプライバシーを維持し、スクリプトを管理したいと考えています。

4

2 に答える 2

1

どのようなエラー メッセージが表示されますか? (コンソールを確認してください)。問題がクロス オリジンであるかどうかは、ブラウザーに表示されます。サーバー上のそのパスへのエイリアスを設定する必要がある場合があります。"file:///" URI スキームを使用せずに Ajax が root の下に移動することは決してないと思います。file uri スキームが Ajax で使用できるかどうかはわかりません。エイリアスは確実に機能します。これは httpd.conf ファイルで行われます

于 2012-09-01T04:31:32.197 に答える
1

質問を誤解している可能性があるため、ここに 3 つの異なる回答があります。1つ目は、あなたが使用した「ドメイン」という言葉に関連しています。http を使用してパブリックなものにアクセスし、https を使用してプライベートなものにアクセスしている場合、最善の選択肢は試さないことです。ブラウザーは、AJAX コードがメインの Web ページが読み込まれたメソッド以外のものにアクセスできるようにすることに非常にうるさいようになっています。私自身の Web サイト プロジェクトでは、すべてを https モードに移行することにしました。http 経由でアクセスするディレクトリには、「favicon.ico」のコピーと、これを含む新しい「index.html」の 2 つのファイルだけを残しました。

 <!DOCTYPE html>
 <html>
 <head>
   <meta charset="UTF-8" />
   <meta name="Author" content="Me" />
   <meta name="Copyright" content= "(C) by Me" />
   <title>Switching to https mode ...</title>
 </head>
 <body onload="window.name='Redirect';window.open('https://www.mysite.com/index.html',
 'Redirect');">
 &nbsp;<h1><noscript><span style="color:#ff0000;">
 This site requires JavaScript to work properly.</span></noscript></h1>
 </body>
 </html>

次の答え。「open_basedir」がどのように設定されているかについては、php.ini ファイルを確認してください。Web サーバーが何らかの目的でアクセスすると予想されるすべてのディレクトリよりも、ディレクトリ ツリーのトランクに近いディレクトリである必要があります。Apache が PHP を使用するように設定されている場合、/bin ディレクトリに php.ini ファイルのコピーが存在する場合があることに注意してください。両方の .ini ファイルで open_basedir 設定を同じにする必要があります。

最後の回答: AJAX によって呼び出される .php ファイル内で相対パスを使用する場合は、十分に注意する必要がありますが、最初に簡単なことを確認しましょう。ベースディレクトリが次のとおりであるとします。

 /Base  //(ignoring drive letter and any "baser" directories here)

そのディレクトリ内には、いくつかの.phpファイルを呼び出すいくつかの.htmlファイルがあり、そのディレクトリにもあります。これらの .html ファイルの 1 つの中で、XMLHttpRequest オブジェクトの JavaScript コードで次のようなものを使用して、それらにアクセスできます。

 AJAXobj.open("GET", "./task1.php?URLdata=hi", true);

「./」は「この .html ファイルと同じディレクトリ」を指定します。一方、サブディレクトリがあるとします。

 /Base/SubDir

そのディレクトリ内には、以前と同様に、/Base ディレクトリ内の同じ .php ファイルを呼び出す .html ファイルがいくつかあります。サブディレクトリ内の .html ファイルには、次のわずかに異なる JavaScript が必要です。

 AJAXobj.open("GET", "../task1.php?URLdata=hi", true);

「../」は、「この .html ファイルを含むディレクトリの親ディレクトリ」を指定します。

今、トリッキーなもののために。その task1.php ファイル内で、別のサブディレクトリにあるデータにアクセスする必要があるとします。

 /Base/DataDir

.html ファイルの場所によって、.php ファイル内で指定する必要があるパスが決まる場合があることがわかりました。すなわち:

A) task1.php ファイル (/Base ディレクトリ内) が他の (/DataDir) サブディレクトリ内のファイルに直接アクセスする場合、次のようなものが必要です。

 file("./DataDir/DatFile.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

-- これは、task1.php を呼び出す .html ファイルがどこにあるかに関係なく当てはまります。

B) .php ファイルがファイルに文字列を作成し、AJAX 処理のためにその文字列を返す場合 (.html ファイル内のより多くの JavaScript コードがデータ ファイルにアクセスするため)、PHP が作成する文字列は、 .html ファイルの場所、次のいずれか:

 "./DataDir/DatFile.txt"

/Base ディレクトリ内の任意の .html ファイル、または

 "../DataDir/DatFile.txt"

/Base/SubDir 内の任意の .html ファイル

ここでの簡単な解決策は、task1a.php と task1b.php のように、2 つの非常によく似た .php ファイルを用意することです。ただし、別の可能性として、相対パスではなく絶対パスを指定する必要があります。

 "https://www.mysite.com/DataDir/DatFile.txt"
于 2014-03-21T12:25:24.667 に答える