Javascript codeigniter从js调用控制器中的方法

Javascript codeigniter从js调用控制器中的方法,javascript,forms,codeigniter,models,Javascript,Forms,Codeigniter,Models,您好,我是codeigniter框架的初学者,我有一些问题 我制作了一个注册表单,按下REGISTER按钮后,我想调用一个js函数formValidation(),该函数应该检查一些基本内容(比如每个字段是否已填充) 如果一切正常,那么我想将注册表中的值提交到控制器的方法checkExistance(),该方法的任务是从用户调用该方法\u modelcheckDoesUserExists($username),该方法将检查数据库中是否有使用该用户名的用户,他将根据base的结果返回true或fa

您好,我是codeigniter框架的初学者,我有一些问题

我制作了一个注册表单,按下REGISTER按钮后,我想调用一个js函数
formValidation()
,该函数应该检查一些基本内容(比如每个字段是否已填充)

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

我的问题是如何从表单提交数据并调用controllers方法并将数据传递给该方法(如$username…),以及如果我在代码中遗漏了任何其他内容

我真的不知道如何从我的js调用controllers方法? 谢谢所有愿意帮助我的人

这是我的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>

函数formValidation(){
var username=document.registrationForm.username.value;
var email=document.registrationForm.email.value;
var name=document.registrationForm.name.value;
var姓氏=document.registrationForm.姓氏.value;
如果(用户名==“”){
警报(“输入您的用户名”);
document.registrationForm.username.focus();
}如果出现其他情况(电子邮件==“”){
警报(“输入您的电子邮件”);
document.registrationForm.email.focus();
}else if(name==“”){
警报(“输入您的姓名”);
document.registrationForm.name.focus();
}else if(姓氏==“”){
警惕(“输入您的姓氏”);
document.registrationForm.name.focus();
}否则{
//警报(“正常”);
document.registrationForm.submit();
//我想从这里调用控制器的方法,并将数据传递给该方法——“checkExistance”
}
}
登记表

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

<?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;
    }
}

}

您尝试过ajax和jquery吗?如果您想在运行JSNo时从后端请求信息,您需要ajax。我没有尝试过ajax或jquery。你能给我一个如何使用AJAX或jQuery实现的例子吗?谢谢,我将尝试这样做。但我仍然在想,当我点击按钮时,如何调用一些控制器方法并传递数据,使用js、ajax或jQuery执行该方法?这一行在表单验证中回调控制器函数$这->表单验证->设置规则('username'、'username'、'callback\u username\u check');这里username\u check是控制器函数,callback是调用控制器函数进行验证的方法。也许我不太理解这一点,但您可以从这一行的方法index()调用$this->form\u validation->set\u rules('username','username','callback\u username\u check');方法username\u check($str),但我想从js调用,js已经放在我的html页面:registration.php中,我想从controller调用方法。要从js向他提交数据,您需要使用ajax,codeigniter的其他形式验证功能还具有回调任何conroller函数和验证用户输入的功能,然后使用codeigniter的form_error函数显示消息。您能给我一些示例如何使用ajax调用方法并传输数据吗。这将是非常有帮助的,我使用它像一个模板
<?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
}   
}
<?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;
    }
}

}