2016-11-22 2 views
0

У меня есть форма, значения которой я пытаюсь отправить после сериализации в контроллер через ajax. Ниже форма:
ФормаCodeigniter-POST не работает через 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, я включил предупреждение с сериализованными данными, что даже показывает мне правильные сериализованные данные. Я считаю, что это что-то не так с тем, как я публикую его. Любая помощь!

+0

Вы пытались удалить проверку $ _SERVER ["REQUEST_METHOD"]? –

+0

@Yohanan да, я пробовал это. Тем не менее он возвращает пустой. Что-то вроде «Array()» –

+0

Попробуйте использовать $ this-> input-> post ('register') –

ответ

0

Try на 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); 

} 
+0

Нет, он не попал внутрь цикла. {'success': false, 'post': ''} –

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

Попробуйте и дайте мне знать, если это работает или нет :)

+0

Не получилось. Это результат: {"status": "failed"} –

+0

Только что я обновил. Повторю еще раз с моим обновленным кодом. –

+0

тот же выход снова –

0

Попробуйте использовать нижеприведенный код.

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

Я думаю, что все ответы были правильными по-своему. Я понял, что возможно, что он не получает DOM после отправки, поэтому я просто положил его в document.ready, и это сработало!

Спасибо

Смежные вопросы