2011-09-24 83 views
4

所以我越來越好使用phonegap,但我仍然試圖完全添加codeigniter作爲後端。我已經能夠在jQuery中加載一些東西,從我的CI控制器到我的phonegap android應用程序,但似乎無法正確提交任何內容到服務器。你需要一個休息服務器從手機通信與CI?我打算使用ajax post來向CI發送信息,但至今無法使其工作。我真的很感激有人可以幫助我渡過這個障礙。由於phonegap與codeigniter後端

link to relative answer

控制器:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Welcome extends CI_Controller { 


    public function index() 
    { 
     //$this->load->view('welcome_message'); 
    $data['query']=$this->site_model->get_last_ten_articles(); 
$this->load->view('partial1',$data); 

    } 

    public function addarticle(){ 
    $headline=$this->input->post('headline'); 
    $article=$this->input->post('article'); 
    $this->site_model->insert_entry($headline,$article);  

    } 
} 

的Javascript(PhoneGap的設備上)

function add_article(){ 



$.ajax({ 
    type: 'POST', 
    url: 'http://testlab.site40.net/droiddev/welcome/addarticle/', 
    data: {"headline": "test headline","article": "test article"} 
    error: function(){alert('fail');}, 
    success: function(data){ 
    alert('article added'); 
    }, 
    dataType: "json" 
}); 

} 
+0

顯示您編寫的代碼無法與codeigniter後端進行成功通信。這是在模擬器還是在設備上? – Femi

+0

將profiler添加到你的'add_article'類中:'$ this-> output-> enable_profiler(TRUE);'它會輸出所有捕獲的數據(POST等等)它可能只是輸入了一些東西,是你的朋友! – Jakub

+0

@Jakub感謝探查器技巧!完全忘了。它是有用的:) –

回答

6

首先,讓我們的例子運行,您的文章的數據是JSON,以及數據類型是JSON,但您的CI實現正在訪問post變量。

的快速和骯髒的解決方法是在後的數據,如提交URI字符串:

var myData = $('#form-id').serialize();

&headline=test%20headline&article=test%20article

這可以從與jquery的serialize函數的形式產生

此發佈數據將在提交時設置在$ _POST var中,然後通過CI發佈功能訪問:

$this->input->post()

*注:remeber去除Ajax調用這個工作具體的數據類型設置。

爲了解決這個問題的一個更加政治上正確的方法,你將要離開你的javascript(這一切都很好),但你需要將CI後端設置爲RESTful服務,默認安裝的控制器和輸入類不會處理它。你需要使用像菲爾鱘魚的REST實現:

+1

什麼沒有upvote :(大聲笑感謝接受反正! – Louis