【问题标题】:CodeIgniter/Ajax - Send post values to controllerCodeIgniter/Ajax - 将发布值发送到控制器
【发布时间】:2011-07-28 15:03:34
【问题描述】:

我正在制作一个简单的登录表单。当用户单击登录按钮时,我想将发布值发送到我的控制器,根据我的数据库(使用模型)验证它们并返回一个值。基于该值,我想将用户发送到成员区域,或者在我的表单上显示错误消息。此错误消息有一个类“错误”,默认情况下是隐藏的。我想在凭据错误时使用 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.. 或者我应该在这里采取另一条路吗?这似乎是我一旦学会了就永远不会忘记如何去做的事情,所以如果有人可以帮助我,我将不胜感激。非常感谢。

【问题讨论】:

    标签: ajax codeigniter jquery


    【解决方案1】:

    你需要做的就是用值创建一个键/值对,并将它分配给数据参数,剩下的由 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

    【讨论】:

    • 假设我输入了error: 而不是success:,我必须从我的PHP 返回什么才能让它进入那里?只返回false?我到了控制器中返回模型的部分(如果找到用户,则为 true,否则为 false)。现在如果成功,我会将用户带到一个新页面,但如果不成功,我想返回我的表单页面并显示错误类。如果这是有道理的。只是不知道如何回到那里.. :(
    • @cabaret error: 仅在请求失败时调用。在您的情况下,我建议您返回一个 json 对象,然后可以检查该对象以查看下一步该做什么。只需 json_encode 在 PHP 中并回显它。而在您的 JS 方面,您可以eval 该数据并查看下一步该做什么。
    • 非常感谢您的编辑。我会确保检查链接并尝试一下。
    • 好的,我知道我的问题是什么了。我检查了这个链接:developertutorials.com/tutorials/ajax/… 并且我了解整个 ajax 的事情,但问题是.. 当我将我的帖子数据发送到我的控制器(登录/去)时,它以某种方式回显那里的数据而不是表单页面(登录/索引).. 因为嗯.. 提交表单需要我登录/去,它不会让我留在登录/索引页面上。 CodeIgniter 将我带到那里并且不会重定向回索引页面。我需要手动放置它还是什么? :(
    • 哈哈,我们都有这样的时刻!每次遇到困难时,我都会查看最明显的清单。
    【解决方案2】:

    只需修改一点你的 ajax 的网址:

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

    确保您的网址指向您想要在控制器中使用的功能。例如:控制器内部的“myfunction” some(在文件 Some.php 中)

    要访问控制器函数中的 post 变量,不要尝试将参数放入 myfunction,而是:

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

    【讨论】:

      【解决方案3】:

      您绝对可以使用您的方法,但速记方法是这样的:

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

      【讨论】:

      • 顺便说一句,提交按钮停止提交的更好方法是: $("#btn_login").click(function(e) {e.preventDefault(); //函数的其余部分);它基本上停止了任何控件的所有浏览器默认行为。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 2022-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多