这非常令人沮丧!我尝试将简单的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
你可以看到你好是空的。 任何帮助都非常感谢!!
让事情变得更加烦人 - 一旦我将fiddler中的http请求更改为GET并在url字符串中添加hello(并将控制器更改为echo get而不是post)就可以了!那么为什么要开始工作但是帖子没有?
答案 0 :(得分:5)
PHP不会填充$_POST
数组,除非它在标题中看到已知的内容类型。
在您的小提琴请求中,尝试添加以下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");
答案 1 :(得分:0)
您的input
标记是否具有名称属性?
我应该<input type="text" name='hello'></input>