所以我有以下 jQuery block ;
var file = "something.html";
$.post("/load", {which: file}, function(data){
// do stuff
});
应该调用加载文件的后端。 load
Controller (我在 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()
测试了 load
Controller 确实有效> 进入 $this->input->get()
并从浏览器访问页面(例如 /load?which=something.html
);加载并回显了正确的文件。
我使用普通$_POST
变量而不是CodeIgniter 处理程序来调试代码。 $_POST["which"]
出现 undefined index 错误。
根据其他线程的建议,我还在 $_POST
和 file_get_contents('php://input ')
,它们都是空的。出于所有意图和目的,后端只是不接收任何 POST 数据。
从我的 Inspector 的网络部分,我可以看到确实发送了 AJAX 调用,并且“表单数据”部分包含 which: something.html
作为它应该。该请求返回 404 Not Found 状态代码。但是,我确实知道在添加 echo "test"; 时确实联系了正确的 Controller ; exit;
在它确实为 AJAX 请求返回“测试”之前进入 Controller 。
就我在网上找到的候选解决方案而言,我的 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 更适合服务器故障,但由于我是一名程序员而不是系统管理员,我想看看这里是否有人有任何想法。谢谢!
最佳答案
根据 Jan Dvorak 的尖锐建议,我将当前环境的配置与代码上次运行的环境的配置进行了比较,并确保启用的 Apache 模块和 PHP 扩展列表是相同的。
在此过程中,除了我已经拥有的模块之外,我还开启了以下 Apache 模块;
- auth_digest_module
- dav_lock_module
- headers_module
- 信息模块
- 代理模块
- proxy_ajp_module
- ssl_模块
- 状态模块
我还打开了以下以前没有打开的 PHP 扩展;
- php_bz2
- php_curl
- php_exif
- php_gettext
- php_imap
- php_openssl
- php_pdo_odbc
- php_pdo_sqlite
- php_soap
- php_sockets
- php_sqlite
- php_sqlite3
- php_xmlrpc
比我聪明的人可以告诉我哪个模块或扩展或其组合是这个问题的确切解决方案。
然而,对我来说,启用这些模块和扩展可以让我确保我的环境与我以前的环境相似,在这种情况下,我无需更改代码或 .htaccess 就解决了这个问题
。
关于php - 通过 AJAX 发送的 POST 结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15152717/