2011-04-03 172 views
4

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

我的表单有两个文本框,一个用于电子邮件地址,另一个用于输入密码和提交按钮。但是,除了像一个简单的加载程序这样的非常基本的东西外,我从来没有真正使用过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({ 
    type: "POST", 
    url: "some.php", 
    data: "name=John&location=Boston", 
    success: function(msg){ 
     alert("Data Saved: " + msg); 
    } 
}); 

不过,我真的不知道如何让我的文章数据中的值(这两个变量):thingy ..或者我应该在这里再走一条路?这似乎是我永远不会忘记一旦我学会了该怎么做,所以如果有人能帮助我,我会很感激。非常感谢。

回答

7

所有你需要做的就是创建一个键/值对的值,并将其分配给数据参数和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,但是你用的是等价的。

基本上你的控制器应该是echo out data。不回来。你需要把你的数据的字符串表示回来,你的脚本可以(评估是否JSON),并作用于它

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

+0

说我把'错误:'而不是'成功:',我必须从我的PHP返回,让它进入那里?只需返回false?我得到了我的控制器中我的模型返回的部分(如果发现用户,则返回true,否则返回false)。现在如果成功,我会将用户带到一个新页面,但如果不成功,我想回到我的表单页面并显示错误类。如果这是有道理的。不知道如何回到那里.. :( – cabaret 2011-04-03 13:23:54

+1

@cabaret'错误:'只有在请求失败的情况下才调用。在你的情况下,我会建议你返回一个json对象,然后可以检查下一步该做什么。只需要在PHP中使用json_encode并且回显它。在你的JS方面,你可以'评估'这些数据并看看下一步该做什么。 – JohnP 2011-04-03 13:32:54

+0

非常感谢编辑,我一定会检查链接并且试试这个。 – cabaret 2011-04-03 14:54:01

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 }); 
+1

btw,提交按钮停止提交的更好的方法是:$(“#btn_login”)。click(function(e){e.preventDefault(); //其余的函数);它基本上停止所有浏览器从任何控件的默认行为。 – 2011-04-03 12:47:44

4

只是modifiy一点点你的AJAX的网址:

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

确保您的网址指向函数y你想在你的控制器里面。例如:“myfunction的”控制器的一些(在文件Some.php)内

要访问控制器功能里面你的帖子变量不要试图把参数给myFunction但:

class Some extends CI_Controller 
{ 
     ...... 

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