したがって、次のjQueryブロックがあります。
var file = "something.html";
$.post("/load", {which: file}, function(data){
// do stuff
});
ファイルをロードするバックエンドを呼び出すことになっています。load
コントローラー (私は CodeIgniter 2.1.3 を使用しています) は次のようになります。
class Load extends MY_Controller {
public function index()
{
$file = $this->input->post("which");
$content = get_file_contents($file);
echo $content;
}
}
ただし、何らかの理由で、$file
変数は空のままです。
ここで、 を に変更し、ブラウザーからページにアクセスして (例: ) 、load
コントローラーが実際に動作することをテストしました。正しいファイルがロードされ、エコーされます。$this->input->post()
$this->input->get()
/load?which=something.html
CodeIgniter ハンドラの代わりにプレーン$_POST
変数を使用してコードをデバッグしました。$_POST["which"]
未定義のインデックス エラーとして表示されます。
他のスレッドからの提案に従って、私も試しvar_dump()
てみました$_POST
とfile_get_contents('php://input')
、両方とも空として表示されます。すべての意図と目的のために、バックエンドは POST データを受信していません。
インスペクタのネットワーク セクションから、AJAX 呼び出しが実際に送信され、「フォーム データ」セクションに必要な情報が含まwhich: something.html
れていることがわかります。リクエストは 404 Not Found ステータス コードで返されます。echo "test"; exit;
ただし、 AJAXリクエストに対してすべてが実際に「テスト」を返す前に、適切なコントローラーが実際にコントローラーに追加されていることを知っています。
オンラインで解決策の候補を見つけた限り、私の php.ini は適切であるはずです。私はそれがvariables_order
含まれP
ていpost_max_size
て、妥当なサイズであることを確認しました. 一部の回答者が .htaccess リダイレクトの可能性を示唆していたので、JS が要求する URL の末尾にスラッシュを追加しようとしましたが、すべて役に立ちませんでした。
参照用の .htaccess は次のとおりです。
# Customized error messages.
ErrorDocument 404 /index.php
# Set the default handler.
DirectoryIndex index.php
# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>
この同じコードは過去に機能していましたが、今は Apache (2.2.22) と PHP (5.3.13) を新しくインストールした新しいコンピューターを使用しています。 Apache または PHP の構成の問題。このスレッドがスタック オーバーフローよりもサーバー フォールトに適しているかどうかはわかりませんが、私はプログラマーでありシステム管理者ではないので、ここに誰か考えがあるかどうかを確認したいと思いました。ありがとう!