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