【问题标题】:pass the data-id attribute value to a controller method using ajax in codeigniter在 codeigniter 中使用 ajax 将 data-id 属性值传递给控制器​​方法
【发布时间】:2016-05-25 15:59:24
【问题描述】:

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

点击按钮后我确实收到了警报('success')

$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);
          }
    });
 });

【问题讨论】:

  • xhr.responseText 产生了什么?
  • 没什么..我在我的问题中提到我从成功中得到警报('success')..
  • 如果你在你的ajax对象中设置了dataType:html,你能把它找回来吗?另外,网络检查器会显示什么?
  • 在我的帖子中添加了 datatype :html 之后的响应
  • console.log(data) 中是否成功,看看是否成功

标签: php jquery ajax codeigniter


【解决方案1】:

您收到警报是因为控制器向浏览器发送了带有服务器代码 200 的回复。该标头响应代码告诉 AJAX 调用 success 函数。 $this-&gt;load-&gt;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 有很多例子来说明如何做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    相关资源
    最近更新 更多