2017-02-24 9 views
0

グッドデイPHPでみんな を任意のデータが供給ません。私はこのことについては新しいことではない。私は最近、codeigniterフレームワークを使用し始めました。そして今、私は常にajaxのために使用してきたパターンはもはや機能しません。 (以前は「外国人」の枠組みを使ったことはありませんでしたが) 私があなたを助けてくれることを願っています。CodeIgniterの、バニラJS:私はAjaxでPOSTデータを送信し、recievingで少し問題を抱えているのAjax POSTリクエストを送信するが、

主な問題は、PHPコントローラが投稿データを受け取らないことです。

ajax.jsは(アヤックス取り扱い、AJAX_URLが目の呼び出しの瞬間に 'http://localhost/ajax/process' で、私はすでにことを確認): actions.js

function AjaxRequest(callback, data) { 
    this.data  = (data!== undefined) ? data : []; 
    this.callback = callback; 
    this.request = new XMLHttpRequest(); 

    this.addData = function(key, value) { 
     this.data[key] = value; 
    }; 

    this.send = function() { 
     var callback = this.callback; 
     this.request.open('POST', <b>AJAX_URL</b>, true); 
     this.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     this.request.onreadystatechange = function() { 
     if (this.readyState === 4 && this.status === 200) { 
      callback(this.responseXML); 
     } 
     }; 

     var data = this.createPostData(); 
     this.request.send(data); 
    }; 

    this.createPostData = function() { 
     var data = ''; 
     for (var key in this.data) { 
     data += key + '=' + this.data[key] + '&'; 
     } 
     data = data.slice(0, -1); 
     console.log(data); 
    }; 
} 

は(から取り扱いアクションが含まれていますウェブサイト):Ajaxのリクエストのための

function requestLogin() { 
    var username = $("input#txtUsername").val(); 
    var password = $("input#txtPassword").val(); 

    var request = new AjaxRequest(callbackLogin); 
    request.addData('action' , 'login_user'); 
    request.addData('username', username); 
    request.addData('password', password); 
    request.send(); 
} 

function callbackLogin(xml) { 
    console.log(xml); 
} 

Ajax.php(CI_Controller取り扱い):今、私は要求、プロセスが呼び出されるメソッドを送信しようとすると、

class Ajax extends CI_Controller { 
    public function __construct() { 
     parent::__construct(); 

     $this->load->library('session'); 
     $this->load->model('user_model'); 
    } 

    public function process() { 
     $data = $this->input->post(); 
     $action = $data['action']; 
     if (method_exists($this, $action)) { 
     $this->$action($data); 
     } 
    } 

    public function login_user($data) { 
     $passwd_enc = md5($data['password']); 
     $xml_resp = new Xml_response(); 

     $user = $this->user_model->login_user($data['username'], $passwd_enc); 
     $xml_resp->start(); 
     if (!$user) { 
     $xml_resp->error(); 
     $xml_resp->send_message(Xml_message::ERROR, 'Benutzername oder Kennwort ist inkorrekt.'); 
     } else { 
     $xml_resp->success(); 
     $xml_resp->send_message(Xml_message::SUCCESS, 'Sie wurden erfolgreich angemeldet.'); 
     $xml_resp->send_data('user', $user); 
     } 
     $xml_resp->end(); 
    } 
} 

は(ログで確認)が、ポスト・アレイは、各可能性に(空である:$ _POSTやCodeIgniterの独自のポスト・アレイ)私はnullというresponseXMLを受け取っています。

は、私がこの部分に間違っ行っているか、私はCodeIgniterのを使用するときに何かを考慮しなければならないのはありますか?

よろしく、トビアスWidner

+0

'login_user()'関数から実際にデータを返すようなことはありません。関数の一番下に 'return $ xml_resp;'という行を追加することはできますか? –

+0

あ、申し訳ありませんが、私はそれを言い忘れました。 ** $ xml_resp-> end(); **コールは、xmlコンテンツ全体(一般的には)** echo **を行います。しかし、私はポストデータを受け取っていないので、コールは起こりません(変数$ _POST ['action']にはjavascriptから送信するアクションが含まれていないので、** login_user ** doesn ' –

答えて

0

があなたの末尾にスラッシュを追加してみてください。(私はスイスから来た)

はあなたに事前に非常に感謝し、私の悪い英語でショックを受けることがないようにしてくださいリクエストURL。あなたのcodeigniterの設定が私のものと同じかどうかはわかりませんが、URLの最後にスラッシュを入れないと、私の.htaccessはURLにスラッシュを付けてリダイレクトします。このリダイレクトにより、すべてのポストデータが削除されます。

+0

Ajaxコントローラをルートに設定する必要がありますか? –

+0

OKコードを試しましたが、WebインスペクタでJSがデータを送信していないことがわかりましたjQueryを他のものに使用しているので、$ .ajaxを使用してリクエストを送信することをお勧めします。http://api.jquery.com/jquery.ajax/ –

+0

さて、本当にありがとうございます。私はいつもjqueryを使用したくないです(なぜ私にはわからないのですか?)しかし、実際にはうまくいきます!なぜそれがバニラjsで動作しなかったのか、興味深いです。 –

関連する問題