2016-06-28 120 views
0

我不想提交表单,但我想要获取输入字段的值并通过ajax将其发送到控制器以便保存在数据库中。 我有这样的下面JS代码,以帮助我得到的输入域的内容和之后在我的控制器的用户输入如何使用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); 
?> 

3第二个发送到服务器端我有这个

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

我要回显,如果标题是草案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,但你的ID形式改变$('#form')

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