0

これは非常にがっかりです!シンプルな 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 を入力します。

フィドラーでの hello 関数の結果は次のとおりです。

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

ご覧のとおり、 hello は空です。どんな助けでも大歓迎です!!

さらに厄介なことに、フィドラーのhttpリクエストをGETに変更し、URL文字列にhelloを追加すると(コントローラーを投稿ではなくエコー取得に変更すると)、機能します!では、なぜ仕事を得るのに投稿はしないのでしょうか?

4

2 に答える 2

5

$_POSTヘッダーに既知のコンテンツ タイプがない限り、PHP は配列にデータを入力しません。

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

于 2013-02-06T14:12:42.483 に答える
0

タグに name 属性がありますinputか??

私はあるべきです<input type="text" name='hello'></input>

于 2013-02-06T14:14:24.510 に答える