Php 通过AJAX发送的帖子结果为空

Php 通过AJAX发送的帖子结果为空,php,ajax,.htaccess,codeigniter,post,Php,Ajax,.htaccess,Codeigniter,Post,因此,我有以下jQuery块 var file = "something.html"; $.post("/load", {which: file}, function(data){ // do stuff }); 它应该调用加载文件的后端。加载控制器(我在CodeIgniter 2.1.3上)看起来是这样的 class Load extends MY_Controller { public function index() { $file = $this-&

因此,我有以下jQuery块

var file = "something.html";
$.post("/load", {which: file}, function(data){
  // do stuff
});
它应该调用加载文件的后端。
加载
控制器(我在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
变量仍然为空

现在,通过将
$this->input->post()
更改为
$this->input->get()
,并从浏览器访问页面(例如
/load?which=something.html
),我已经测试了
加载
控制器是否真的能工作;加载并回显正确的文件

我通过使用普通
$\u POST
变量而不是CodeIgniter处理程序来调试代码
$\u POST[“which”]
显示为未定义的索引错误

根据其他线程的建议,我还尝试了
var\u dump()
上的
$\u POST
file\u get\u contents(
)php://input)
,它们都显示为空。无论出于何种目的,后端都不会接收任何POST数据

从我的检查器的网络部分,我可以看到AJAX调用确实被发送了,而“表单数据”部分包含了它应该包含的
:something.html
。返回的请求带有404未找到状态代码。但是,我知道,在添加
echo“test”时,确实会联系到适当的控制器;退出输入到控制器中,然后才返回AJAX请求的“test”

就我在网上找到的候选解决方案而言,我的php.ini应该是合适的;我已经确保
变量\u顺序
包含
P
并且
post\u max\u大小
是一个合理的大小。正如一些回答者建议的那样,这可能是一个.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>
#自定义错误消息。
ErrorDocument 404/index.php
#设置默认处理程序。
DirectoryIndex.php
#各种重写规则。
重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$index.php/$1[L,QSA]

同样的代码在过去也可以使用,但现在我在一台新的计算机上安装了Apache(2.2.22)和PHP(5.3.13),这让我相信这很可能是Apache或PHP的某种配置问题。我不知道这是否使这个线程比堆栈溢出更适合服务器故障,但由于我是程序员而不是系统管理员,我想看看这里是否有人有任何想法。谢谢

根据Jan Dvorak的尖锐建议,我将当前环境的配置与代码上次运行的环境进行了比较,并确保启用的Apache模块和PHP扩展的列表是相同的

在这个过程中,除了已经打开的Apache模块外,我还打开了以下Apache模块

  • 认证摘要模块
  • dav_锁定_模块
  • 头文件单元
  • 信息单元
  • 代理模块
  • 代理ajp模块
  • ssl_模块
  • 状态单元
我还打开了以前没有打开的以下PHP扩展

  • php_bz2
  • php_卷曲
  • php_exif
  • php_gettext
  • php_imap
  • php_openssl
  • php_pdo_odbc
  • php_pdo_sqlite
  • php_soap
  • php_套接字
  • php_sqlite
  • php_sqlite3
  • php_xmlrpc
一个比我聪明的人可以告诉我哪个模块、扩展或它们的组合是这个问题的精确解决方案


然而,对我来说,启用这些模块和扩展使我能够确保我的环境与前一个环境相似,在这种情况下,解决了我的问题,不需要对代码或
.htaccess

进行任何更改。您是否尝试过将
哪个
用引号括起来-
{“which”:file}
?当您尝试站点/加载时,它会显示什么?您是否缺少站点\u url()
$.post(…
…@asprin)它在JSON中是必需的,但不是由Javascript@EmphramStavanger尝试将两个
.ini
文件区分开来