[英]PHP CI Can't See Post Variable
这非常令人沮丧! 我试图将一个简单的Ajax帖子发送到本地Web应用程序,并且参数为空。 为了调试它,我打开了提琴手,但结果却一样!
我有这个控制器
class Site extends CI_Controller {
public function __construct() {
parent::__construct();
} //etc
有了这个功能
public function hello() {
var_dump($_SERVER['REQUEST_METHOD']);
var_dump($_SERVER['REQUEST_URI']);
$hello = $this->input->post("hello");
echo "hello is $hello";
}
现在,我尝试在Fiddler中对此进行测试,然后转到Composer,选择一个新的Post请求并将其放入正文hello = wtsgppp。
这是fiddler中hello函数的结果:
string(4) "POST"
string(25) "/cmd/index.php/site/hello"
hello is
如您所见,hello是空的。 任何帮助,万分感谢!
使事情更烦人的是-一旦我将提琴手中的http请求更改为GET并在url字符串中添加问候(并将控制器更改为echo get而不是post),它就起作用了! 那么为什么要上班却不能上班呢?
除非PHP在标头中看到已知的内容类型,否则不会填充$_POST
数组。
在您的Fiddle请求中,尝试添加以下HTTP标头:
Content-Type: application/x-www-form-urlencoded
这是因为PHP解码原始POST正文并将其注入$_POST
变量(CI所查看的内容)的方式取决于将请求发送到服务器的方式。
编辑 :如果您也没有在XHR / AJAX帖子中看到它,请确保同时设置了Content-Type
标头。 jQuery(和大多数JS库)将自动为您执行此操作,但是如果您不使用库,则必须自己完成操作:
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
您的input
标签是否具有名称属性?
我应该是<input type="text" name='hello'></input>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.