2011-09-24 84 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