Php 通过AJAX发送的帖子结果为空
因此,我有以下jQuery块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-&
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
文件区分开来