无法使用jQuery .ajax()向php codeIgniter发布选择多个

时间:2017-04-05 08:04:09

标签: php jquery ajax codeigniter

我正在尝试将多个select元素值发布到php,这只是在.ajax帖子中给出错误。它适用于HTML表单。

JS:

function serealizeSelects(select){
      var array = [];
      select.each(function(){ array.push($(this).val()) });
      return array;
    }

$("#go").on('click', function(e){
    e.preventDefault();
    if($("#title").val()=='') swal('','Please enter the title.','warning');
    else{
        $("#go").text('Publishing...');
        $("#go").prop('disabled',true);
        $.ajax({
          url: '<?=base_url();?>'+'classes/add_notes',
          type: "POST",
          data: {
            title: $("#title").val(),
            content: $("#content").val(),
            file: upFile,
            class: JSON.stringify(serealizeSelects($('.selectpicker'))),
            <?=$this->security->get_csrf_token_name();?>:'<?=$this->security->get_csrf_hash();?>',
          },
          dataType: "json",
          success: function(data){
            $("#go").text('Publish');
            $("#go").prop('disabled',false);
            if(data.error=='false'){
              swal('Published','Your notes has been shared to selected classes.');
            }
            else{
              if(data.error_code=='1') swal('','Please fill fields properly!','warning');
              else if(data.error_code=='2') swal('','Unauthorised','error');
              else swal('','Something went wrong','error');
            }
          },
          error: function(){
            $("#go").text('Publish');
            $("#go").prop('disabled',false);
            swal('','Some error occured','error');
          }
        });
      }
  });

HTML:

<select class="selectpicker" data-live-search="true" id="class" multiple>
       <option value="0">Choose classes...</option>
              <?=$classes;?>
 </select>

** PHP(CodeIgniter):**

$this->form_validation->set_rules('title', 'title', 'trim|required|xss_clean');
       $this->form_validation->set_rules('content', 'content', 'trim|xss_clean');
       $this->form_validation->set_rules('file', 'file', 'trim|xss_clean');
       $this->form_validation->set_rules('class[]', 'class', 'trim|required|xss_clean');

       if($this->form_validation->run() == FALSE OR $this->end!='teacher'){
         $response['error']="true";
         $response['error_code']="1";
       }
       else{
          $title=$this->input->post('title');
          $content=$this->input->post('content');
          $file=$this->input->post('file');
          $classes=json_decode($this->input->post('class[]'),true);
            foreach($classes as $class){
               // Some task
            }
      }

我寻找了很多解决方案,但都没有。 我也尝试使用 class ,而不是 class [] 。 什么都没有用! 发布此操作会执行ajax的错误部分。

1 个答案:

答案 0 :(得分:0)

进行以下更改:

<select class="selectpicker" data-live-search="true" id="class" multiple>

<select name="selectpicker[]" class="selectpicker" data-live-search="true" id="class" multiple>

并获得其值:

$this->input->post('selectpicker');

说明:对于multi-select dropdown,其名称必须与selectpicker[]类似,以便它可以在其中包含多个选定值,并通过使用其名称获取其值PHP。

在尝试 $this->input->post('class[]'),true);

时,您永远无法在PHP中直接使用其类获取html元素值