CodeIgniter / Ajax - 将发布值发送到控制器

时间:2011-04-03 12:36:57

标签: ajax codeigniter jquery

我正在处理一个简单的登录表单。当用户单击Login按钮时,我想将post值发送到我的控制器,根据我的数据库验证它们(使用模型)并返回一个值。基于该值,我想要将用户发送到成员区域,或者在我的表单上显示错误消息。此错误消息具有类“错误”,默认情况下是隐藏的。我想使用jQuery的show()在凭据错误时显示它。

我的表单有两个文本字段,一个用于电子邮件地址,另一个用于密码和提交按钮。但是,我从来没有真正使用Ajax,除了非常基本的东西,如简单的加载器,所以我不知道下一步该做什么。

    $("#btn_login").click(
    function()  
    {
    // get values
    var email_address = $("#email_address").val(); 
    var password =  $("#password").val();

    // post values? and ajax call?

    //stop submit btn from submitting
    return(false);

    }
);

我假设我必须在这里使用jQuery的ajax()方法,所以我想要解决这个例子:

$.ajax({
     type: "POST",
     url: "some.php",
     data: "name=John&location=Boston",
     success: function(msg){
        alert( "Data Saved: " + msg );
     }
});

但是,我不确定如何在数据中获取我的帖子值(这两个变量):thingy ..或者我应该在这里走另一条路?这似乎是我永远不会忘记在我学习之后该怎么做的事情,所以如果有人可以帮助我,我会感激不尽。非常感谢。

3 个答案:

答案 0 :(得分:7)

您需要做的就是使用值创建一个键/值对,并将其分配给data参数,jQuery将完成剩下的工作。

//create a js object with key values for your post data
var postData = {
  'email' : email_address,
  'password' : password
};

$.ajax({
     type: "POST",
     url: "some.php",
     data: postData , //assign the var here 
     success: function(msg){
        alert( "Data Saved: " + msg );
     }
});

有了这个,您应该能够使用Codeigniters input

访问数据

修改

我在这里设置了一个测试小提琴:http://jsfiddle.net/WVpwy/2/

$('#dostuff').click(function(){
    var email_address = $("#email_address").val(); 
    var password =  $("#password").val();

    var postData = {
      'email' : email_address,
      'password' : password,
      'html' : 'PASS'
    };

    $.post('/echo/html/', postData, function(data){
        //This should be JSON preferably. but can't get it to work on jsfiddle
        //Depending on what your controller returns you can change the action
        if (data == 'PASS') { 
            alert('login pased');
        } else {
            alert('login failed');
        }
    });
});

我只是喜欢.post,但你使用的是等效的。

基本上你的控制器应回显输出数据。不归路。您需要发回数据的字符串表示,以便您的脚本可以(评估json)并对其进行操作

这是一个很好的例子作为起点:http://www.ibm.com/developerworks/opensource/library/os-php-jquery-ajax/index.html

答案 1 :(得分:4)

只需修改你的ajax的网址:

$.ajax({
     type: "POST",
     url: "some/myfunction",
     data: "name=John&location=Boston",
     success: function(msg){
        alert( "Data Saved: " + msg );
     }
});

确保您的网址指向控制器内所需的功能。例如:控制器内的“myfunction”部分(在文件Some.php中)

要访问控制器函数内的post变量,请不要尝试将参数放到myfunction中,但是:

class Some extends CI_Controller 
{
        ......

public function myfunction()
{
    $name = $this->input->post('name');
    $location = $this->input->post('location');
}
       ......
}

答案 2 :(得分:1)

你绝对可以使用你的方法,但这是一种速记方法:

$.post("some.php",{name:"John",location:"Boston",email:email_address,password:password},function(data,textStatus) { //response from some.php is now contained in data });