【问题标题】:codeigniter calling methods in controller from js来自js的控制器中的codeigniter调用方法
【发布时间】:2015-08-04 18:40:23
【问题描述】:

您好,我是 codeigniter 框架的初学者,但遇到了一些问题。

我做了一个注册表单,在我按下按钮 REGISTER 后,我想调用一个 js 函数 formValidation() 来检查一些基本的事情(比如每个字段是否被填写)。

如果一切正常,那么我想将这些值从注册表单提交到控制器的方法checkExistance(),该方法的任务是从 users_model checkDoesUserExists($username) 调用该方法,该方法将检查我们是否拥有该用户我们数据库中的用户名,他将根据 base 的结果返回 true 或 false。

我的问题是如何从我的表单提交数据并调用控制器方法并将数据传递给该方法(如 $username ...),如果我错过了代码中的其他任何内容?

我真的不知道如何从我的 js 中调用控制器方法? 感谢所有愿意帮助我的人!

这是我的html页面:registration.php

<html>
<head>

    <script>
        function formValidation(){
            var username = document.registrationForm.username.value;
            var email = document.registrationForm.email.value;
            var name = document.registrationForm.name.value;
            var surname = document.registrationForm.surname.value;

             if(username == ""){
                alert('enter your username');
                document.registrationForm.username.focus();
            }else if(email == ""){
                alert('enter your email');
                document.registrationForm.email.focus();
            }else if(name == ""){
                alert('enter your name');
                document.registrationForm.name.focus();
            }else if(surname == ""){
                alert('enter your surname');
                document.registrationForm.surname.focus();
            }else{
                //alert('OK');
                document.registrationForm.submit();
                //I would like to call controller's method from here and to pass data to that method - "checkExistance"
            }
        }
    </script>

</head>
<body>


    <fieldset>
        <legend>Registration form</legend>                
            <form name="registrationForm" method="post" aciton="<?php echo $_SERVER['PHP_SELF'];?>">
                    <table>
                        <tr><td>Username</td><td> <input type="text" name="username" placeholder="insert your username"> </td></tr>
                        <tr><td>Email</td><td> <input type="text" name="email" placeholder="insert your email"> </td></tr>
                        <tr><td>Name</td><td> <input type="text" name="name" placeholder="insert your name"> </td></tr>
                        <tr><td>Surname</td><td> <input type="text" name="surname" placeholder="insert your surname"> </td></tr>

                        <tr><td> <input type="button" value="REGISTER" onclick="formValidation()"> </td><td> <input type="reset" value="Clear form">  </td></tr>
                    </table>                    
            </form>               
        </fieldset>

</body>
</html>

这是我的控制器:users_controler.php

<?php

class Users_controler extends CI_Controller{

function index(){
    $this->load->view('registration');
}


function checkExistance(){
    $username['username'] = $this->input->post('username');//// ????   This is probably wrong

    $this->load->model('users_model');
    $result = $this->users_model->checkDoesUserExists($username);
    if($result == true){
        echo 'OK - username is available, we will now activate in the users_model "addUser()" method to add a user in database';
    }  else {
        echo 'ALERT - User already exists';
    }     
}
}

这是我的模型:users_model.php

<?php

class User_model extends CI_Model{

function checkDoesUserExists($username){
    $query = $this->db->query("select * from users where username = '$username'");
    if($query->num_rows()>0){
        return false;
    }
    return true;
}

function addUser(){
    // Adding the user in this step
}   
}

感谢所有愿意帮助我的人!!!!

【问题讨论】:

  • 你试过 ajax 和 jquery 吗?
  • 运行JS的时候想从后端请求信息需要AJAX
  • 不,我没有尝试使用 AJAX 或 jQuery。你能给我一个例子,如何使用 AJAX 或 jQuery 做到这一点吗?

标签: javascript forms codeigniter models


【解决方案1】:

在您的控制器操作函数中使用表单验证,如下所示。

<?php

   class Form extends CI_Controller {

public function index()
{
    $this->load->helper(array('form', 'url'));

    $this->load->library('form_validation');

    $this->form_validation->set_rules('username', 'Username', 'callback_username_check');
    $this->form_validation->set_rules('password', 'Password', 'required');
    $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
    $this->form_validation->set_rules('email', 'Email', 'required|is_unique[users.email]');

    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('myform');
    }
    else
    {
        $this->load->view('formsuccess');
    }
}

public function username_check($str)
{
    if ($str == 'test')
    {
        $this->form_validation->set_message('username_check', 'The %s field can not be the word "test"');
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}

}

这里需要重点关注回调函数username_check,类似于checkExistance函数中需要做的改变,其余的可以在这里学习。

https://ellislab.com/codeigniter/user-guide/libraries/form_validation.html

【讨论】:

  • 谢谢你,我会尽量做到这一点。但是我仍然想知道如何调用一些控制器方法并在我单击按钮时使用 js、ajax 或 jQuery 来传递数据?
  • 表单验证中的这一行回调控制器函数。 $this->form_validation->set_rules('username', 'Username', 'callback_username_check');这里 username_check 是控制器函数,回调是调用控制器函数进行验证的方式。
  • 也许我不太理解这个,但是你从这一行中的方法 index() 调用 $this->form_validation->set_rules('username', 'Username', 'callback_username_check') ;方法 username_check($str),但我想从已放置在我的 html 页面中的 js 调用:registration.php,我想从控制器调用方法。并向他提交数据
  • 来自 js,您需要使用 ajax 其他明智的 codeigniter 表单验证还具有回调任何控制器函数并验证用户输入,然后使用 codeigniter 的 form_error 函数显示消息的功能
  • 你能给我一些例子,如何使用 ajax 调用方法并传输数据。像模板一样使用它对我很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
相关资源
最近更新 更多