【问题标题】:CodeIgniter and AJAX formCodeIgniter 和 AJAX 表单
【发布时间】:2014-04-03 12:03:05
【问题描述】:

我正在为我的网络应用程序使用 CodeIgniter,但我目前被 AJAX 表单所困扰。 我已经为我的“忘记密码”模式创建了一个视图,它看起来像这样:

<form action="<?=base_url()?>users/forgot_pass" method="post" id="forget_pass_form">
    <div class="form_header">
        <h1>Forgot your password?</h1>
    </div>
    <?php if($ajax_error == 0) { ?>
    <div class="front_success">
        <p>Password was succesfully sent to your email address.</p>
    </div>
    <?php } ?>

    <?php if($ajax_error == 1) { ?>
    <div class="login_error">
        <p>Email address was not found in the database.</p>
    </div>
    <?php } ?>

    <div id="loading_spinner"></div>
    <p><input type="text" name="to_email" placeholder="Sähköpostiosoite" class="user" style="background-postion: -200px; margin-top: 20px;" />
    <input type="submit" name="to_submit" value="Lähetä salasana" class="login_submit" id="forget-pass" /></p>
</form>

这是我的控制器:

<?php
    class Users extends CI_Controller {
        public function forgot_pass()
        {
            if(isset($_POST['to_submit'])) {
                    $this->load->model('user');
                    $email = $_POST['to_email'];
                    $email_addr = $this->user->get_email_address($email);

                    if($email_addr) {
                        foreach($email_addr as $row) {
                            $this->load->library('email');
                            $this->email->from('me');
                            $this->email->to($email);  
                            $this->email->subject('Testing');
                            $this->email->message('Your password is: ' . $row['password']); 

                            if(!$this->email->send()) {
                                $data['ajax_error'] = 1;
                            } else {
                                $data['ajax_error'] = 0;                                                                }
                            }
                        }
                    }
                $this->load->view('header');
                $this->load->view('index', $data);
                $this->load->view('footer');

        }   


    }


?>

我不会发布我的模型,因为我知道 100% 肯定它可以工作,而且它只包含一种方法来检查是否在数据库中找到电子邮件。

现在我想通过使用 AJAX 使其更具动态性。如果在数据库中找到电子邮件地址并且已发送邮件,我希望它在 div 中回显成功消息 到该电子邮件地址,否则我希望它回显错误“在数据库中找不到用户”。

这是我现在的 js 文件:

$(document).ready(function() {
    $("form#forget_pass_form").on('submit', function(){
        var from = $(this);
        $.ajax({
            url: from.attr('action'),
            type: from.attr('method'),
            data:$(from).serialize(),
            beforeSend: function(){
                        $("#loading_spinner").show();
                }
        });
        return false;
    }); 
});

AJAX 部分本身正在工作,但我只是不知道如何实现这些消息。任何帮助将不胜感激。

【问题讨论】:

  • 根据条件在 ajax 1 或 0 上回显
  • 你能说得具体一点吗?
  • 我在回答检查中做了一些工作......
  • @harsh 我猜 echo 在 javascript 中不起作用!
  • @B_CooperA 苛刻地说,检查 ajax 中的响应!放一个成功函数!

标签: php jquery ajax codeigniter


【解决方案1】:

让你的 html 代码像这样

   <div class="front_success" style="display:none">
        <p>Password was succesfully sent to your email address.</p>
    </div>



<div class="login_error" style="display:none">
    <p>Email address was not found in the database.</p>
</div>

控制器的小改动:-

                                if($this->email->send()) {

                                    echo '1';

                                } else {

                                    echo '0';  

                                  }

因此,您的控制器根据该成功函数返回的任何内容都将成为潜水表演

试着让你的 ajax 代码像这样:-

$.ajax({

        url: from.attr('action'),

        type: from.attr('method'),

        data:$(from).serialize(),

        beforeSend: function(){
                        $("#loading_spinner").show();
                },
        success: function (data) {

   //alert(data);  alert it if you want to check the function output

             if(data == '1'){
   //if the email is send then it return 1 so that you show success msg
              $("#login_success").show();

                }else{
  //if the email is not send then it return 0 so that you show error msg
              $("#front_error").show();

               }
$("#loading_spinner").hide();// hide when ajax complete
             }


    });

【讨论】:

  • 如果您在 ajax 中发现任何问题,那么在成功函数中只需提醒数据变量
  • 它似乎不起作用.. AJAX 部分.. 即使我输入正确,它也会始终给我该错误消息。删除 Javascript 后,它将发送电子邮件
  • 确定打开该警报(数据);并检查它是哪种类型的错误
  • @B_CooperA 想一想评论你的 $this->load->view 所有三行如果 forgot_pass() 没有加载页面当前忘记密码页面...如果它正在加载它们让我知道...为什么要评论,因为这三行在 ajax 中生成您的页面,所以整个源代码都在 alert(data)
  • 我把它们注释掉了,现在它正在警告一个空白的警告框
猜你喜欢
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多