如何从Codeigniter中的任何视图将数据传递到Base Controller?

时间:2018-01-07 15:34:11

标签: php jquery ajax codeigniter

我想从ajax向基本控制器传递数据,但它无法正常工作。 我怎么能这样做?

我的核心/ MY_Controller中的BaseController

我的基本控制器:

<?php 
    class MY_Controller extends CI_Controller {
    public $site_data;
    function __construct() {
      parent::__construct();
    }

    public function user_data_submit() {
      $abc=$this->input->post('name');
      $data = array(
      'no' => $this->input->post('name')
        );

      //$data2["a"]=$abc;
       /*$return["json"] = json_encode($return);
        echo json_encode($return);*/
      echo json_encode($abc);
  }}

我的Ajax:

jQuery.ajax({
  type: "POST",
  url: "<?php echo base_url(); ?>" + "MY_Controller/user_data_submit",
  dataType: 'json',
  data: { name: ogrno },
  success: function(data) {
    if (data) {
      // Show Entered Value
      alert(data);
      $("#notifications #bsayisi").text('');
    }
  }
});
});
});

1 个答案:

答案 0 :(得分:1)

你非常接近。主要问题是尝试直接使用MY_Controller。我会解释你需要做什么,但首先你需要纠正MY_Controller中的一些问题。

您传递给json_encode()的内容存在问题。你的ajax调用需要一些修复 - 如图所示});行太多了。 (也许这是因为您没有显示的代码。如果是,那么请忽略我。)

假设ogrno是先前定义的var。如果没有,也要修复它。

试试这个javascript

jQuery.ajax({
    type: "POST",
    url: "<?php echo base_url(); ?>" + "MY_Controller/user_data_submit",
    dataType: 'json',
    data: {name: ogrno},
    success: function (data) {
        if (data)
        {
            // Show Entered Value
            alert(data);
            //next line commented out because your intent is unclear
            //$("#notifications #bsayisi").text('');
        }
    }
});

这应该可以修复控制器。

public function user_data_submit()
{
    $data = array('no' => $this->input->post('name'));
    echo json_encode($data);
}

您无法直接使用MY_Controller,就像您无法直接使用CI_Controller一样。要使用MY_Controller,您必须使用MY_Controller“扩展”新控制器。例如......

class Welcome extends MY_Controller { ...

Welcome控制器现在可以使用方法user_data_submit()

但是,ajax调用中的url选项现在将失败,因为“MY_Controller”不是调用所需的位置。它需要转到welcome。该值必须是扩展MY_Controller的控制器。 PHP Magic Constant __CLASS__提供了获取扩展类名称的解决方案。

url: "<?php echo base_url(__CLASS__); ?>" + "/user_data_submit",

__CLASS__将始终是扩展MY_Contoller的类的名称。