带有codeigniter后端的phonegap

时间:2011-09-24 13:45:26

标签: jquery ajax json codeigniter cordova

所以我在使用phonegap方面越来越好,但仍在尝试完全添加codeigniter作为后端。我已经能够从我的CI控制器到我的phonegap android应用程序中加载jquery,但似乎无法向服务器正确提交任何内容。您是否需要休息服务器才能通过phonegap与CI通信?我打算使用ajax帖子向CI发送信息,但到目前为止无法让它工作。我真的很感激有人可以帮助我克服这个障碍。感谢

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

}

1 个答案:

答案 0 :(得分:6)

首先,让我们让你的例子运行,你的帖子数据是json,数据类型是json,但你的CI实现正在访问post变量。

快速而肮脏的解决方法是在帖子数据中提交uri字符串,例如:

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

这可以使用jquery序列化函数从表单生成:

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

此帖子数据将在提交时的$ _POST var中设置,然后可通过CI帖子功能访问:

$this->input->post()

*注意:请记住删除ajax调用中的dataType设置以使其正常工作。

对于解决此问题的更政治正确的方法,你会想要单独保留你的javascript(这一切都很好)但是你需要将CI后端设置为RESTful服务,默认安装的控制器和输入课程不会处理它。你需要使用Phil Sturgeon的REST实现:

  • 代码有github project
  • A blog post(首先阅读 - 它是REST服务器的一个很好的简短入门,用于关注CI的用法),
  • 您已经了解的tutorial
  • 哦和video设置它。