2013-02-06 77 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>