1

I would like to achieve something like these below code. just that the code is making a request from the database, i want to send request to the database

$.post( "/trobay/categories/default/lists?parent_id="+$(this).val(), function( data ) {

how to send request adding attribute name and attribute value to be save in DB below is my code i have already

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

in my controller i have this

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

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

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

and in my view i have this

<?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_title')->textInput(['maxlength' => true]) ?>

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

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

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

Now my question is I just want to grab the value of each field input and send it to server side for save in the DB without having to submit the whole form The about JS code works enough to get the value but how do i send this to the server for save up

sam
  • 853
  • 3
  • 19
  • 50
  • If you want to convert your form to JSON notation where the element name is key and the value ... well... the value, maybe [this question](http://stackoverflow.com/questions/11338774/serialize-form-data-to-json) can get you started. Search for the keyword `serializeObject`... – Raphioly-San Jun 28 '16 at 06:02

1 Answers1

0
    //user is "finished typing," do something
    function doneTyping () {
        data = \$TitleInput.val();
        $.ajax({
              url: '/trobay/draft/create',
              type: 'POST',
              data: {title: data}
              success: function (data) {
                       alert(data)
              },
              error: function(jqXHR, errMsg) {
                    // handle error
                    alert(errMsg);
              }
        });
    });

If you need to send more key value just add those as comma seperated value like

data: {title: data, attr:"value"} 

and so on...and you can receive this value as post parameter in your controller.

Asif Rahaman
  • 775
  • 6
  • 10
  • ok thanks this really make some sense, is there a way i can load the form at controller side something like ($model->load(Yii::$app->request->post()) && $model->save()). is there a way to do this with ajax, this will save me from using global variable $_post directly or how can i filter the $_POST.. thanks – sam Jun 28 '16 at 07:26
  • I'm not actually an expert on yii. But i guess you will be able to access data both using $_POST["title"] and CHttpRequest::getParam('title') in your controller. and to filter $_POST you can use php built-in functions like filter_input() or filter_var(). – Asif Rahaman Jun 28 '16 at 08:26