使用codeigniter中的ajax将data-id属性值传递给控制器​​方法

时间:2016-05-25 15:59:25

标签: php jquery ajax codeigniter

我有一个具有data-id属性的按钮元素。我需要使用jquery ajax post方法将data-id发送到codeigniter中的控制器方法。我没有任何形式。但是ajax我做的请求无法进入控制器方法。可能是什么原因以及如何解决这个问题?在我的配置文件中我设置了基本URL并使用htaccess文件重写了index.php:

点击按钮

后,我会收到警报('成功')
$config['base_url'] = 'http://localhost/mycodeigniter/ci/'

管理员控制器:

 class Admin extends CI_Controller{


         public function processReq(){
            $this->load->view('admin/processReq');

         }

   }

按钮(无表格元素):

<button type="button" data-id='approved' class="approved buttons">Approve</button>

ajax方法:

 $(".buttons").click(function(event){
     var status=$(this).data('id');

     $.ajax({
        url:"<?php echo base_url('admin/processReq') ;?>",
        type: "POST",
        data: {
            status: status
        },

        success: function(data) {
            alert('success');
        },
        error: function(xhr, status, error) {
             var error=xhr.responseText;
             alert(error);
          }
    });
 });

enter image description here

1 个答案:

答案 0 :(得分:0)

您收到警报,因为控制器向浏览器发送了服务器代码为200的回复。该标头响应代码告诉AJAX调用success函数。 $this->load->view('admin/processReq');是OK(代码200)的来源。

此控制器显示另一种处理方式,以便您可以根据processReq()的回复做出反应。

class Admin extends CI_Controller
{
  public function index()
  {
    $this->load->view('admin/processReq'); //if this really is the view file
  }


  public function processReq()
  {
    $status = this->input->post('status'); 
    //I am assuming that data('id') is '1' or '0' since you
    //don't describe what it actually is I had to make something up.
    if($status === '1'){
      echo json_encode(array('results' => 'success')) ;
    }else{
      echo json_encode(array('results' => 'fail')) ;
    }
  }

}

您需要添加一个ajax选项 - dataType: 'json' - 以便可靠地使用

 $.ajax({
    url:"<?php echo base_url('admin/processReq') ;?>",
    type: "POST",
    dataType: 'json',
    data: {
        status: status
    },

您的ajax success功能可以执行此操作

success: function(data) {
  if(data.results === 'success'){
    alert('success');
  } else {
    alert('success');   
  }
},

指示失败的另一种方法是输出具有400或500(错误)范围内的服务器代码的标头。如果你这样做,那么将调用ajax error函数。 SO有许多如何实现这一目标的例子。