【问题标题】:how to call php file using ajax in codeigniter MVC view file如何在codeigniter MVC视图文件中使用ajax调用php文件
【发布时间】:2017-08-22 10:50:31
【问题描述】:

我正在使用 codeigniter 的 MVC,我正在尝试使用 Ajax 从我的控制器文件中加载一个函数。

我的 Ajax 代码在没有 codeigniter MVC 的情况下完美地加载了 php 文件。但是在 codeigniter 中,我不确定如何在 Ajax 函数中调用 php 文件/函数。

我的代码看起来像这样没有codeigniter,它工作正常

<script>
function showUser(str) {
if (str == "") {
    document.getElementById("txtHint").innerHTML = "";
    return;
} else { 
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            document.getElementById("txtHint").innerHTML = this.responseText;
        }
    };
       ////////////////////////////////////////////
      //////// This loads find without MVC////////
     ////////////////////////////////////////////
    xmlhttp.open("GET","ajax-php.php?q="+str,true);
    xmlhttp.send();
    ////////////////////////////////////////////
   //////// This loads find without MVC////////   
  ////////////////////////////////////////////
}
}
</script>

但是在codeigniter的视图文件中不起作用如下图

    <script>
    function showUser(str) {
        if (str == "") {
            document.getElementById("txtHint").innerHTML = "";
            return;
        } else { 
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    document.getElementById("txtHint").innerHTML = this.responseText;
                }
            };
              ////////////////////////////////////////////
             //////// this is problem////////////////////
            ////////////////////////////////////////////
            xmlhttp.open("GET","<?= base_url(); ?>" + "/controller_page/ajax_file.php?q="+str,true);
            xmlhttp.send();
           ////////////////////////////////////////////
          //////// this is problem////////////////////
         ////////////////////////////////////////////
        }
    }
 </script>

所以问题出在下面的代码中,(已从上面的代码中删除以使其更易于阅读)因为我不确定如何在 codeigniter 的 MVC 环境中加载脚本中的函数

              ////////////////////////////////////////////
             //////// this is problem////////////////////
            ////////////////////////////////////////////
            xmlhttp.open("GET","<?= base_url(); ?>" + "/controller_page/ajax_file.php?q="+str,true);
            xmlhttp.send();
           ////////////////////////////////////////////
          //////// this is problem////////////////////
         ////////////////////////////////////////////

提前致谢

【问题讨论】:

    标签: php jquery ajax codeigniter


    【解决方案1】:

    你的路径应该是:

    xmlhttp.open("GET","<?= base_url(); ?>" + "/controller_name/controller_function_name?q="+str,true);
    xmlhttp.send();
    

    让我们假设 controller_name= user 和 controller_function_name = my_test_ajax。 那么控制器用户应该如下所示:

    class User extends CI_Controller {
         public function __construct(){
            parent::__construct();
            // load model helper etc 
         }
    
         public function my_test_ajax(){
            // get q
            $qry= $_GET['q'];
            echo $qry;
         }
    }
    

    希望对你有所帮助。

    【讨论】:

    • 抱歉没早点回复,没看到
    【解决方案2】:
    <?= base_url(); ?>
    

    这将迫使您将 JS 与 PHP 一起粉碎。从长远来看,你会因此而失去时间和理智。 您应该做的是使用 视图文件 创建 JS 配置值:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); ?>
    <script type="text/javascript">
        var CONFIG = {
                    'base_url': '<?php echo base_url(); ?>',
                    'language': '<?php echo $this->config->item('language'); ?>',
                    'permitted_uri_chars': '<?php echo $this->config->item('permitted_uri_chars'); ?>',
                    'cookie_prefix': '<?php echo $this->config->item('cookie_prefix'); ?>',
                    'cookie_domain': '<?php echo $this->config->item('cookie_domain'); ?>',
                    'cookie_path': '<?php echo $this->config->item('cookie_path'); ?>',
                    'csrf_expire': '<?php echo $this->config->item('csrf_expire'); ?>',
                    'csrf_token_name' : "<?php echo $this->security->get_csrf_token_name(); ?>",
                    'csrf_cookie_name' : "<?php echo $this->security->get_csrf_hash(); ?>",
                    'picture_max_upload_size' : "<?php echo Settings_model::$db_config['picture_max_upload_size']; ?>"
                }
    </script>
    

    如您所见,您可以通过在模板中加载此视图文件来将任何 PHP 值“传输”到 JS,例如:

    <?php $this->load->view('generic/js_system'); ?>
    

    在 HTML 模板中,我将其添加到我的 app.js 文件之前,该文件包含实际的 AJAX 连接方法。

    现在您可以像这样调用您的基本网址:

    <script>
    $.ajax({
       method: 'POST',
       url: CONFIG.base_url + 'module/controller/method/',
       dataType: 'json',
       data: $data
    }).done(function(result) {
       // etc...
    }
    </script>
    

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2018-06-08
      相关资源
      最近更新 更多