2015-02-08 11 views
23

मैं इन आवश्यकताओं के साथ ActiveForm का उपयोग कैसे कर सकता हूं?Yii2 - ActiveForm AJAX सबमिट

  • AJAX के साथ फ़ॉर्म सबमिट करें।

  • AJAX के साथ सबमिट करने से पहले: जांचें कि क्या त्रुटि निकलती है या नहीं।

  • जमा करने के बाद: यदि सर्वर असफल बचत परिणाम प्रतिसाद देता है तो फ़ील्ड के इनपुट के अंतर्गत फ़ील्ड की त्रुटि प्रदर्शित करें।

+0

वास्तव में, यह सिर्फ तुम क्या Yii पहले से ही ActiveForm साथ प्रदान करता है - सर्वर से डेटा भेजने से पहले ग्राहक पर स्वत: सत्यापन के लिए जावास्क्रिप्ट भी शामिल है। – robsch

+1

@robsch यह AJAX के साथ फ़ॉर्म सबमिट नहीं करता है जो उपयोगकर्ता पूछ रहा है। – TheStoryCoder

उत्तर

16

यह आपका रूप है। मैं सत्यापन और बचत के लिए विभिन्न कार्यों का उपयोग करना पसंद करता हूं। आप उन्हें एक विधि में शामिल कर सकते हैं।

<?php $form = \yii\widgets\ActiveForm::begin([ 
    'id' => 'my-form-id', 
    'action' => 'save-url', 
    'enableAjaxValidation' => true, 
    'validationUrl' => 'validation-rul', 
]); ?> 

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

<?= Html::submitButton('Submit'); ?> 
<?php $form->end(); ?> 

सत्यापन कार्रवाई में आपको लिखना चाहिए। यह आपके फॉर्म को मान्य करता है और ग्राहक को त्रुटियों की सूची देता है। :

public function actionValidate() 
{ 
    $model = new MyModel(); 
    $request = \Yii::$app->getRequest(); 
    if ($request->isPost && $model->load($request->post())) { 
     \Yii::$app->response->format = Response::FORMAT_JSON; 
     return ActiveForm::validate($model); 
    } 
} 

और यह कार्रवाई को बचाता है। सुरक्षा के लिए मान्य इनपुट डेटा में:

public function actionSave() 
{ 
    $model = new MyModel(); 
    $request = \Yii::$app->getRequest(); 
    if ($request->isPost && $model->load($request->post())) { 
     \Yii::$app->response->format = Response::FORMAT_JSON; 
     return ['success' => $model->save()]; 
    } 
    return $this->renderAjax('registration', [ 
     'model' => $model, 
    ]); 
} 

यह कोड आपके फॉर्म को क्रिया Validate() और मान्य करेगा। सबमिट करने से पहले AJAX उपयोग के माध्यम से अपना फॉर्म जमा करने के लिए। आपकी जावास्क्रिप्ट फ़ाइल में लिखें:

$(document).on("beforeSubmit", "#my-form-id", function() { 
    // send data to actionSave by ajax request. 
    return false; // Cancel form submitting. 
}); 

यह सब कुछ है।

+0

मुझे लगता है कि आपको 'ऑन ("सबमिट", ....)' के बजाय '("पहले सबमिट करें", ...) ' – Houmam

+0

का उपयोग करना चाहिए, मुझे यह तय करने की ज़रूरत है कि मुझे अजाक्स कॉल के आधार पर गलत या सत्य वापस करना चाहिए या नहीं प्रतिक्रिया। लेकिन AJAX प्रतिक्रिया से पहले वापसी झूठी निष्पादित हो रही है। कृपया मुझे ऐसा करने का एक तरीका सुझाएं। – Pravin

+0

@ प्रवीण अजाक्स एसिंक है और आप सामान्य रूप से इसकी प्रतिक्रिया से परिणाम वापस नहीं कर सकते हैं। मैं जावास्क्रिप्ट अच्छी तरह से नहीं जानता। लेकिन आप [async/await] (https://javascript.info/async-await) देख सकते हैं। यह आपकी मदद करेगा। –

7

AJAX के साथ फ़ॉर्म सबमिट करें। AJAX के साथ सबमिट करने से पहले: जांचें कि क्या त्रुटि निकलती है या नहीं। Yii प्रदर्शन त्रुटि किसी भी डिफ़ॉल्ट रूप से करता है, तो ....... :)

use yii\helpers\Html; 
use yii\bootstrap\ActiveForm; 
use yii\widgets\Pjax; 

/* @var $this yii\web\View */ 
/* @var $model backend\models\search\JobSearch */ 
/* @var $form yii\bootstrap\ActiveForm */ 
?> 

<div class="job-search"> 

    <?php $form = ActiveForm::begin([ 
     'action' => ['index'], 
     //'method' => 'get', 
     'options' => ['id' => 'dynamic-form111'] 
    ]); ?> 

    <?php echo $form->field($searchModel, 'id') ?> 

    <?php echo $form->field($searchModel, 'user_id') ?> 

    <?php echo $form->field($searchModel, 'com_id') ?> 

    <?php echo $form->field($searchModel, 'job_no') ?> 

    <?php echo $form->field($searchModel, 'court_id') ?> 

    <?php // echo $form->field($model, 'case_no') ?> 

    <?php // echo $form->field($model, 'plainttiff') ?> 

    <?php // echo $form->field($model, 'defendant') ?> 

    <?php // echo $form->field($model, 'date_fill') ?> 

    <?php // echo $form->field($model, 'court_date') ?> 

    <?php // echo $form->field($model, 'status_id') ?> 

    <?php // echo $form->field($model, 'created_at') ?> 

    <?php // echo $form->field($model, 'updated_at') ?> 

    <div class="form-group"> 
     <?php echo Html::submitButton('Search', ['class' => 'btn btn-primary','id'=>'submit_id']) ?> 
     <?php echo Html::resetButton('Reset', ['class' => 'btn btn-default']) ?> 
    </div> 

    <?php ActiveForm::end(); ?> 

</div> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $('body').on('beforeSubmit', 'form#dynamic-form111', function() { 
      var form = $(this); 
      // return false if form still have some validation errors 
      if (form.find('.has-error').length) 
      { 
       return false; 
      } 
      // submit form 
      $.ajax({ 
      url : form.attr('action'), 
      type : 'get', 
      data : form.serialize(), 
      success: function (response) 
      { 
       var getupdatedata = $(response).find('#filter_id_test'); 
       // $.pjax.reload('#note_update_id'); for pjax update 
       $('#yiiikap').html(getupdatedata); 
       //console.log(getupdatedata); 
      }, 
      error : function() 
      { 
       console.log('internal server error'); 
      } 
      }); 
      return false; 
     }); 
    }); 
</script>