【问题标题】:php Codeigniter and jquery ajaxphp Codeigniter 和 jquery ajax
【发布时间】:2016-10-30 18:41:25
【问题描述】:

我想在登录后使用 ajax 调用 codeigniter 控制器。但是当我执行它时,登录页面只被刷新并且ajax url没有调用codeigniter的控制器函数。

我不明白发生了什么。请帮忙?

下面是我的代码

function ValidateReg() {

        var username = document.getElementById("inputName").value;
        var password = document.getElementById("inputPassword").value;
    $.post("<?php echo site_url('Panel/login') ?>", {checkUser: username, checkPassword: password, action: "validateUser"},
        function (data) {
            var result = data + "";
            if (result.lastIndexOf("Success" > -1)) {
                $.ajax({
                    url: "<?php echo site_url('Dashboard/state'); ?>",
                    type: 'POST',
                    complete: function (done) {
                        console.log("Finished.")
                    }
                });
            }
        });
}

这里 Panel 和 Dashboard 是我的两个不同的控制器

【问题讨论】:

  • 这取决于你如何处理login点击事件。请向我们展示整个点击事件代码。
  • 在登录按钮上我正在调用脚本函数。
  • 请向我们展示处理点击事件的代码。这可能有助于我们解决。
  • 我刚刚编辑的有问题的代码。

标签: php ajax codeigniter


【解决方案1】:

函数 ValidateReg() {

    var username = document.getElementById("inputName").value;
    var password = document.getElementById("inputPassword").value;
    $.post("<?php echo site_url('Panel/login') ?>", {checkUser: username, checkPassword: password, action: "validateUser"},
    function (data) {
        var result = data + "";
        if (result.lastIndexOf("Success" > -1)) {
            $.ajax({
                url: "<?php echo site_url('Dashboard/state'); ?>",
                type: 'POST',
                success: function (done) {
                    console.log("Finished.")
                }
            });
        }
    });
    return false;

}

【讨论】:

    【解决方案2】:

    如果您想做的是转到页面Dashboard/state,那么使用ajax 是错误的方法。您需要改为重定向到该页面。

    $.post("<?php echo site_url('Panel/login') ?>", {checkUser: username, checkPassword: password, action: "validateUser"},
      function (data) {
        var result = data + "";
        if (result.lastIndexOf("Success" > -1))
        {
          console.log("Finished.");
          window.location = "<?php echo site_url('Dashboard/state'); ?>";
        }
      }
    );
    

    使用 javascript 重定向的另一种方法是这样的

    window.location.replace("<?php echo site_url('Dashboard/state'); ?>");
    

    这可能更好,因为它不会将原始页面保留在会话历史记录中。

    【讨论】:

    • 它有效。谢谢。
    【解决方案3】:

    它会被刷新,因为它是一个提交按钮并且它必须在表单内。所以它在点击事件时提交表单。

    你需要做的是让你的函数在点击按钮时返回false,这样页面就不会被刷新。

    像这样更新你的 HTML,

    <button type="submit" class="btn button text-uppercase" onclick="return ValidateReg();">Login </button>
    

    你的 JS 函数看起来像这样:

    function ValidateReg() {
    
            var username = document.getElementById("inputName").value;
            var password = document.getElementById("inputPassword").value;
            $.post("<?php echo site_url('Panel/login') ?>", {checkUser: username, checkPassword: password, action: "validateUser"},
            function (data) {
                var result = data + "";
                if (result.lastIndexOf("Success" > -1)) {
                    $.ajax({
                        url: "<?php echo site_url('Dashboard/state'); ?>",
                        type: 'POST',
                        complete: function (done) {
                            console.log("Finished.")
                        }
                    });
                }
            });
            return false;
    }
    

    【讨论】:

    • 你将如何使用异步方法作为ValidateReg()的一部分
    • asynchronous 方法不受此代码影响。
    猜你喜欢
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    相关资源
    最近更新 更多