当数据在javascript codeigniter php中使用ajax成功功能时,如何禁用页面重新加载?

Posted

技术标签:

【中文标题】当数据在javascript codeigniter php中使用ajax成功功能时,如何禁用页面重新加载?【英文标题】:how can page reload disabled when data get using ajax success function in javascript codeigniter php? 【发布时间】:2016-05-04 09:29:39 【问题描述】:

我有一个注册表单,并想检查注册用户是否会尝试再次注册以使用 ajax 功能显示警告窗口已注册

我用过codeigniter框架。

我的功能正常工作,但是当弹出警报并按确定页面重新加载时。我想禁用

我的表单代码:

<form class="modal-content" name="form2" action="<?= $this->config->base_url();?>home/register_user" method="post" onSubmit="return ValidateRegister()">
                                              <div class="modal-header">
                          <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">×</span>
                          </button>
                          <h4 class="modal-title">Create your account</h4>
                        </div>
                       <div class="page-content vertical-align-middle" style="display:block;">
      <div class="form-group has-error">
                    <label class="control-label" for="inputTokenfieldError-tokenfield"> <?php echo validation_errors();  ?></label>

                  </div>
        <div class="form-group form-material floating">
          <input type="text" class="form-control " id="inputName" name="username" value="<?php echo set_value('username'); ?>" autocomplete="off">
          <label class="floating-label">Username</label>
        </div>
        <div class="form-group form-material floating">
          <input type="email" class="form-control " id="my_email" name="email" value="<?php echo set_value('email'); ?>" autocomplete="off">
        <label class="floating-label">Email</label>
        </div>
        <div class="form-group form-material floating">
          <input type="password" class="form-control " id="inputPassword" name="password" autocomplete="off">
          <label class="floating-label">Password</label>
        </div>

 <div class="form-group">
        <button type="submit" class="btn btn-primary btn-block">Join Now - It's Free</button>
 </div>

      </form>

我的javascript函数:

function checkRegistrations() 
        
            var email = $('#my_email').val();
            $.ajax(
                url: "<?= base_url() ?>home/checkRegistration",
                async: false,
                type: "POST",
                data: "email="+email,
                dataType: "html",
                success: function(data) 
                  //  alert(data);
                    if(data==1)
                    

                    //event.preventDefault();
                    alert('Email already registered');
                    return false;
                    window.location.reload(false);
                    
                    else

                        return true;
                    
                
            )
        

【问题讨论】:

想禁用我的表单代码是什么意思? 【参考方案1】:

只需在提交按钮上添加一个 ID,例如 #submitbutton

并使用jQuery.prop()方法设置按钮的禁用属性。

$("#submitbutton").prop("disabled", true);

IMP:这仅在您在 ajax success 上保持相同页面时才有效,但如果您要重新加载该页面,则需要检查它php方当前$_SESSION是否已提交此表单。

因此,在您的 php ajax 处理程序中,您可以进行如下检查。

session_start();
if(!empty($_POST) && empty($_SESSION['post'])) 
    $_SESSION['post'] = true;
    ... do your code
    unset($_SESSION['post']);
else
// send the json encoded error message 

然后在html 表单上添加一个名为posthidden input 并将value 设置为1 或任何您认为合适的名称,所以一旦提交表单,@ 987654336@ 键将设置在$_SESSION SuperGlobal Array 中,如果 same 用户两次提交相同的表单,则 php 不会接受它。

【讨论】:

【参考方案2】:

您正在从 annon 内部返回 true/false。功能,即成功处理程序。但是父函数没有返回真/假。

像这样修改你的代码:

function checkRegistrations() 
        
            var email = $('#my_email').val();
            var isValid = true;
            $.ajax(
                url: "<?= base_url() ?>home/checkRegistration",
                async: false,
                type: "POST",
                data: "email="+email,
                dataType: "html",
                success: function(data) 
                    if(data==1)
                    
                    alert('Email already registered');
                    isValid = false;
                    
                
            );
           return isValid;
        

【讨论】:

以上是关于当数据在javascript codeigniter php中使用ajax成功功能时,如何禁用页面重新加载?的主要内容,如果未能解决你的问题,请参考以下文章

在 Codeigniter 中使用 javascript 多字段的动态选择框

构建数据库、codeigniter 模型和 javascript 调用以优化速度和效率

使用 javascript (codeigniter) 以动态形式将 PHP 导入数据库

为啥当我输入整数数据时,它的值在 Codeigniter 中总是四舍五入

Codeigniter 4:无法解密加密的帖子数据

在 CodeIgniter 中寻找一些 Javascript 类的好例子