2013-02-06 78 views
0

这是非常令人沮丧的!我试图发送一个简单的ajax文章到我的本地网络应用程序,而参数是空的。为了调试它,我打开了提琴手,但同样的结果正在发生!PHP CI无法查看帖子变量

我有这个控制器

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"; 
} 

现在我尝试提琴手测试这个,我去作曲,选择新发布采购信息,并把在身上招呼= wtsgppp。

这里是你好功能的小提琴手结果:

string(4) "POST" 
string(25) "/cmd/index.php/site/hello" 
hello is 

正如你可以看到Hello是空的。 任何帮助非常感谢!

让事情变得更加烦人 - 一旦我将fiddler中的http请求更改为GET并在url字符串中添加hello(并将控制器更改为echo get而不是post),它就起作用了!那么,为什么要工作,但职位不是?

+1

你尝试的var_dump($ _ POST),看看是怎么来了呢? – Laurence

+2

你可以发布AJAX部分吗? –

+0

Ajax是我真正的代码,没有工作..所以我开始用小提琴调试它,它再现!我开始想,也许我的CI配置中的某些东西会导致此 – user1551120

回答

5

PHP将不会填充$_POST数组,除非它在标头中看到已知的内容类型。

在你的小提琴的要求,尝试添加下面的HTTP标头:

Content-Type: application/x-www-form-urlencoded

这是因为PHP解码原始POST体并将其注入到$_POST变量(这是CI的样子at)取决于请求发送到服务器的方式。

编辑如果您在XHR/AJAX文章中没有看到它,请确保您也设置了Content-Type标题。 jQuery的(和大多数JS库)将自动为您做到这一点,但你必须做你自己,如果你不使用库:

request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

+0

GENIUS!非常感谢你的朋友 – user1551120

+0

@ user1551120没问题!很高兴它解决了。 –

0

input标签有name属性? ?

我应该<input type="text" name='hello'></input>