2016-01-27 5 views
2

Я новичок в Yii и буду признателен за любую помощь. оказывает вид с формой:Yii 2, Отправить форму, используя Ajax

public function actionCreate() 
{  
    return $this->render('create');  
} 

вид:

<form id="myform" action="/test/web/index.php?r=form/preorder" method="post"> 
    <input type="text" id="form-firstname" name="Form[firstName]" required maxlength="50">      
    <input type="text" id="form-lastname" name="Form[lastName]" required maxlength="50"> 
    <input name="send" type="submit" value="Отправить"> 
</form> 

Im используя простой HTML вместо расширений Yii в форме, потому что мне нужно иметь внешний интерфейс только с HTML/JavaScript. На бэкэнд я могу использовать Yii.

Теперь я пытаюсь представить форму с помощью Ajax:

$(document).ready(function(){  
$("body").on('beforeSubmit', 'form#myform', function(e){  
     var form = $(this); 
     $.ajax({ 
      url : form.attr('action'), 
      type : 'POST', 
      data : form.serialize(), 
      success: function (response) 
      {     
       console.log(response); 
      }, 
      error : function() 
      { 
       console.log('internal server error'); 
      } 
     }); 
    return false; 

    }); 
}); 

FormController:

public function actionPreorder(){ 

    if (Yii::$app->request->isAjax) { 
      Yii::$app->response->format = Response::FORMAT_JSON; 
      $res = array(
       'body' => $_POST, 
       'success' => true, 
      ); 
      //also I need to save to db 
      return $res; 
    } 
} 

Проблема заключается в том, когда я отправить форму, он перенаправляет на новую страницу preorder, и я не вижу моих опубликованных данных. Я не уверен, что я делаю неправильно.

+0

Просьба указать, почему вы используете обычный HTML? Из-за использования AngularJs или чего-то подобного? В противном случае лучше использовать виджет «ActiveForm» с проверкой AJAX. – arogachev

+0

'if (Yii :: $ app-> request-> isAjax)' всегда false, потому что вы не используете правильный yii-вызов ajax. проверьте перед этим вы получите опубликованные данные. –

+0

удалите 'if (Yii :: $ app-> request-> isAjax)'. то он будет работать. –

ответ

1

Итак, решение удалить действие из формы:

<form id="myform" action="" method="post"> 

ЯШ:

$("#myform").submit(function(e){ 
     var form = $(this); 
     $.ajax({ 
      url : '/megogo/web/index.php?r=form/preorder', 
      type : 'POST', 
      data : form.serialize(), 
      success: function (response) 
      {     
       console.log(response); 
      }, 
      error : function (e) 
      { 
       console.log(e); 
      } 
     }); 
    return false;   
    }) 
Смежные вопросы