Codeigniter-POST无法通过ajax工作

时间:2016-11-22 20:53:07

标签: javascript php jquery ajax codeigniter

我有一个表单,我试图通过ajax序列化到控制器后发布它的值。以下是表格:
表单

<form method="post" id="frm_reg_student" class="stop-propagation registration-form">
  <input type="hidden" name="register[user_type]" value="2">
  <input type="hidden" name="register[status_id]" value="1">
  <div class="stud_register_error"></div>
  <div class="row">
      <div class="col-xs-6 col-sm-6 col-md-6">
          <div class="form-group">
              <label for="input" class="control-label font-12 font-blue">First Name <span>*</span></label>
              <input type="text" class="form-control" required="required" placeholder="Your First Name" name="register[first_name]">
          </div>
      </div>
      <div class="col-xs-6 col-sm-6 col-md-6">
          <div class="form-group">
              <label for="input" class="control-label font-12 font-blue">Last Name  <span class="req">*</span></label>
              <input type="text" class="form-control" required="required" placeholder="Your Last Name" name="register[last_name]">
          </div>
      </div>
  </div> 
</form>  

js

$(".js-btn_reg_student").click(function(e){
        e.preventDefault();
        var serialData= $( "#frm_reg_student" ).serialize();
        alert(serialData);
        $.ajax ({
            type: "POST",
            url: '<?=base_url()?>index.php/register/signup/',
            data: serialData,
            success: function(result) {
                alert(result);
                output = JSON.parse(result);
                if(result) {
                    if( 'success' == output.type ) {
                        location.href = output.location;
                    } else {
                        $('.stud_register_error').html(output.message);    
                    }
                }
            }
        });
    });

控制器

public function signup(){
      if($_SERVER["REQUEST_METHOD"]=="POST"){
      print_r($_POST);
  }
}

在这里,$_POST变为空,它永远不会进入循环。如果您在JS中看到,我已经包含了序列化数据的警报,这甚至向我显示了正确的序列化数据。我认为发布它的方式有问题。 任何帮助!

4 个答案:

答案 0 :(得分:0)

试试ajax

$(".js-btn_reg_student").click(function(e){

    var formdata = $( "#frm_reg_student" ).serialize();

    $.ajax({
        type: "post",
        url: "<?php echo base_url('register/signup');?>",
        data: formdata,
        dataType: 'json',
        success: function(json) {
        if (json[success]) {
            alert(json['post']);
        } else {

        }

        }
    });
    e.preventDefault();
});

和控制器

public function signup() {

    $data = array(
        'success' => false,
        'post' => ''
    );

    if ($this->input->server("REQUEST_METHOD") == 'POST')
    {

        $data['success'] = true;
        $data['post'] = $_POST;

    }

    echo json_encode($data);

 }

答案 1 :(得分:0)

尝试

    $('#js-btn_reg_student').click(function () {
      $.ajax ({
        type: 'post',
        url: '<?php echo base_url(); ?>index.php/test/signup/',
        data: $('#frm_reg_student').serialize(),
        dataType: 'json',
        success: function(result) {
          if(result.status == 'success')
          {
            alert(result.name);
          }
          else
          {
            alert(result.status);
          }
        }
      });
   });

在控制器

public function signup ()
{
   if($this->input->post())
   {
    $data = array('status' => 'success');
    $data['name'] = $this->input->post('register[first_name]');
   }
   else
   {
    $data = array('status' => 'failed');
   }
    echo json_encode($data);
}

尝试并让我知道它是否有效:)

答案 2 :(得分:0)

尝试使用以下代码。

while(true)

答案 3 :(得分:0)

我认为所有答案都是以自己的方式正确的。我发现它可能在提交时没有获得DOM,所以我只是把它放在document.ready中就可以了!

由于