2016-06-28 2 views
0

Я не хочу, чтобы отправить форму, но я хочу получить значение поля ввода и отправить его на контроллер через ajax для сохранения в базе данных. я это ниже JS код, чтобы помочь мне получить содержимое поля ввода и отправить на стороне сервера через 3 секунды пользовательского вводаКак сохранить данные с помощью ajax в yii2

<?php 
$script = <<< JS 
$(document).ready(function(){ 
    //setup before functions 
    var typingTimer; 
    var doneTypingInterval = 3000; 
    var \$TitleInput = $('#product-product_title'); 

    //on keyup, start the countdown 

    \$TitleInput.on('keyup input change paste',function(){ 
     clearTimeout(typingTimer); 
     if (\$TitleInput.val()) { 
      typingTimer = setTimeout(doneTyping, doneTypingInterval); 
     } 
    }); 
    //user is "finished typing," do something 
    function doneTyping() { 

     data = \$TitleInput.val(); 

     $.ajax({ 
      url: '/trobay/draft/create', 
      type: 'POST', 
      data: data, 
      success: function (data) { 
       alert(data) 
      }, 
      error: function(jqXHR, errMsg) { 
       // handle error 
       alert(errMsg); 
      } 
     }); 
    } 
}); 
JS; 
$this->registerJs($script); 
?> 

в мой контроллер у меня есть этот

public function actionCreate() 
{ 
    $model = new Draft(); 

    if ($model->load(Yii::$app->request->post())) { 
     $model->created_at = \time(); 
     if($model->save()){ 
      echo draftId; 
     }else{ 
      echo '0'; 
     } 

    } else { 
     return $this->render('create', [ 
      'model' => $model, 
     ]); 
    } 
} 

I хочу повторить назад draftid если заголовок был проект был успешно сохранить как сделать эту работу Plase любую помощь по этому

ниже мой взгляд

<?php $form = ActiveForm::begin([ 
    'id' => $model->formName(), 
    'enableClientValidation' => true, 
    'fieldConfig' => ['template' => '{label}{input}{hint}'] 
]); ?> 
    <div class="row"> 
     <div class="col-md-12"> 
      <?= $form->field($model, 'product_title')->textInput([ 
       'class' => 'title-input', 
       'placeholder' => 'Give us a title for your items(include size,brand,color,material. e.t.c)', 
      ])->label(false) ?> 
     </div> 
     <div class="col-md-12 text-muted">E.g Men's blue addidas glide running shoes size 11 </div> 
    </div> 
    <?= $form->field($model, 'user_id')->textInput() ?> 

    <?= $form->field($model, 'product_name')->textInput(['maxlength' => true]) ?> 

    <?= $form->field($model, 'product_description')->textarea(['rows' => 6]) ?> 

    <?= $form->field($model, 'category_id')->textInput() ?> 

у меня есть это, на мой взгляд, но я хотел бы только сохранить значение первого поля ввода через 3 секунды, что пользователь ввел там дорожим

+0

Пожалуйста, покажите ваш взгляд с формой – Vitaly

+0

@Vitaly спасибо я обновил мой вопрос, и я добавил мой взгляд – sam

+0

я хочу, чтобы добавить значение к БД каждый раз, когда значение пользователя изменяется таким образом я не ждет пользователей, чтобы заполнить все формы и отправить – sam

ответ

0

Попробуйте JS, но изменить $('#form') на форме ID

$(document).ready(function(){ 
    //setup before functions 
    var typingTimer; 
    var doneTypingInterval = 3000; 
    var $form = $('#form'); 

    //on keyup, start the countdown 

    $form.find('input[type="text"]').on('keyup input change paste',function(){ 
     clearTimeout(typingTimer); 
     if ($(this).val()) { 
      typingTimer = setTimeout(doneTyping, doneTypingInterval); 
     } 
    }); 
    //user is "finished typing," do something 
    function doneTyping() { 
     $.ajax({ 
      url: '/trobay/draft/create', 
      type: 'POST', 
      data: $form.serialize(), 
      success: function (data) { 
       alert(data) 
      }, 
      error: function(jqXHR, errMsg) { 
       // handle error 
       alert(errMsg); 
      } 
     }); 
    } 
}); 
Смежные вопросы