使用 jquery / ajax 在 CodeIgniter 的控制器中调用函数

Posted

技术标签:

【中文标题】使用 jquery / ajax 在 CodeIgniter 的控制器中调用函数【英文标题】:Call function inside CodeIgniter's controller using jquery / ajax 【发布时间】:2014-04-05 03:11:19 【问题描述】:

有人可以向我解释在 Codeigniter 中使用 jquery / ajax 调用 php 函数的正确方法是什么。现在,这段代码不起作用,我不知道为什么。请注意,admin.php 控制器位于管理地图中。提前致谢

html代码

<form action="#" method="POST" id="change">
             <input type="hidden" value="<?php echo $row->id_product; ?>" id="prod" >    
             <input type="submit" value="switch" >
</form>
<div class="resultdiv">
    <?php echo $data; ?>
</div>

我在 admin.php 控制器中的函数

 public function do_search()
        $id = $this->input->post('id');
        return $id;
    

Jquery AJAX 脚本

$( "#change" ).submit(function() 
  alert( "Change" );
  var id = $('#prod').val();
     $.ajax(
            type:'POST',
            url:'admin321/do_search',
            data:'id':id,
            success:function(data)
                $('#resultdiv').html(data);
            
        );
);

配置/routes.php

$route['admin/do_search'] = "admin_controller/admin/do_search";

【问题讨论】:

【参考方案1】:

我知道这是旧帖子,但也许有人会觉得这很有用。

我通过在 url 中添加 index.php 来解决这个问题。即使index.php 使用重写隐藏。

  $( "#change" ).submit(function() 
      alert( "Change" );
      var id = $('#prod').val();
         $.ajax(
                type:'POST',
                url:'<?php echo base_url("index.php/admin/do_search"); ?>',
                data:'id':id,
                success:function(data)
                    $('#resultdiv').html(data);
                
            );
    );

【讨论】:

干得好!做到了! 很高兴能帮上忙 :) 如果该函数中需要参数怎么办?我们如何通过它?谢谢 您可以使用示例中的数据属性,其中 ID 以 JSON 格式发送到控制器。【参考方案2】:

可能是这样的:

    $( "#change" ).submit(function() 
  alert( "Change" );
  var id = $('#prod').val();
     $.ajax(
            type:'POST',
            url:'<?php echo base_url("admin/do_search"); ?>',
            data:'id':id,
            success:function(data)
                $('#resultdiv').html(data);
            
        );
);

你必须加载这个助手:

$this->load->helper('url');

@编辑

$route['admin/do_search'] = "admin_controller/admin/do_search";

此代码是不必要的。

【讨论】:

我有自动加载的帮助 url,但不知何故 ajax 不能正确调用函数,或者它不能以某种方式正确检索数据..【参考方案3】:

过去,我为ajax请求设置了一个路由。像这样的:

$route['admin/search/(:any)'] = 'admin_controller/admin/do_search/$1';

那么我的 ajax 请求将如下所示:

var prod = $('#prod').val();
$.ajax(
    type: 'post',
    url:'admin/search/'+prod
    ...
);

或者,您可以通过 jQuery 获取表单操作并将其用作您的 url。

<form action="admin/search/123" method="post">

$.ajax(
    type: 'post',
    url: $('form').attr('action')
    ...
);

【讨论】:

【参考方案4】:

我知道这行得通。我的路线文件是默认的。

我在控制器的 __construct() 函数中加载了 CI URL 帮助程序

$this->load->helper('url');

这是我的 ajax:

/*
 *Ajax function to load confirmation page
 */
var formID=$("div form");
formID.submit(function(event)        //activated on submit event
    event.preventDefault();           //stops page from reloading
    $.ajax(
        type:"POST",
        url:'<?php echo site_url("plan/process")?>',
        data:formID.serialize(),
        success:function(data)
            $("div #msg_area").html(data);
            window.setTimeout(function()parent.location.reload(),3000);
         
    );
);

我有多个控制器,所以它调用特定的一个调用计划和函数过程。流程函数一如下所示:

function process ()

        $json_data = strtolower(json_encode($this->input->post()));
        $res = array();

        //Simple Error/success display...
        $res = json_decode($this->plan->process_plan($json_data ),true);
        if(array_key_exists('error',$res))
            $window = "warning";
            $error=explode(":",$res['error']);
            $result['message']="<h2><span class='color-dark'>Submission error:</span> ".$error[0]." </h2><p>".$error[1]."</p>";
        
        else
            $window = "success";
            $result['message'] = "<h2>Submission was a success</h2>";
        
        echo $this->load->view("common/components/".$window,$result);


     

这对我很有用。希望它有所帮助。

【讨论】:

【参考方案5】:

在您的路线文件中,您有:admin321/do_search NOT:admin/do_search

你也可以尝试使用绝对路径:

`http://www.website.com/admin/do_search` or `http://localhost/admin/do_search`

在ajax url参数中

【讨论】:

不,抱歉,这不是。

以上是关于使用 jquery / ajax 在 CodeIgniter 的控制器中调用函数的主要内容,如果未能解决你的问题,请参考以下文章

jquery中ajax使用error调试错误的方法

如何在 Django 中使用 jQuery/Ajax 发布?

jquery使用ajax

jQuery AJAX

JQuery中ajax使用方法

使用 jQuery 侦听未使用 jQuery.AJAX 加载的 AJAX 加载