所以我有以下 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
变量仍然为空。
现在,我通过将 更改为 a并从浏览器访问页面(例如),测试了load
控制器确实有效;正确的文件被加载并回显。$this->input->post()
$this->input->get()
/load?which=something.html
我已经通过使用普通$_POST
变量而不是 CodeIgniter 处理程序来调试代码。$_POST["which"]
出现未定义的索引错误。
根据其他线程的建议,我也尝试过var_dump()
and $_POST
,file_get_contents('php://input')
它们都显示为空。出于所有意图和目的,后端只是没有收到任何 POST 数据。
从我的 Inspector 的 Network 部分,我可以看到AJAX 调用确实已发送,并且“Form Data”部分包含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 的配置问题。我不知道这是否使这个线程比 Stack Overflow 更适合服务器故障,但由于我是程序员而不是系统管理员,我想看看这里是否有人有任何想法。谢谢!