2015-08-10 4 views
0

Моего элемента формыYii2 запрос Ajax возвращение Ошибки 404 и 400

<?= $form->field($model, 'batch_id')->dropDownList($BatchOptions, ['prompt'=>'Select Batch','onchange'=>' 
      $.post("'.Url::toRoute('week/getbatchdata').'", { id: $(this).val() }) 
         .done(function(data) { 
       var BatchData = $.parseJSON(data); 
       console.log(BatchData); 
      }); 
     ']); ?> 

мой контроллер

public function actionGetbatchdata($id) 
{ 
    $model = $this->findModel($id); 
    $batch = $model->getBatch(); 
    return \yii\helpers\Json::encode($batch); 
} 

я получаю ответ 404 без идентификатора в качестве жалобы. , когда я изменить АЯКС .POST к .get я получаю ответ 400

Благодаря

ответ

0

При создании функции, как actionGetbatchdata($id) {} вы должны добавить id в качестве параметра GET (добавляя его к URL). Поэтому, когда вы используете $.post(), вы отправляете id в качестве параметра POST.

Я рекомендую сделать следующие изменения:

public function actionGetbatchdata($id) 
{ 
    Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 

    $model = $this->findModel($id); 
    return $model->getBatch(); 
} 

Установив формат ответ на JSon в elliminate необходимости в сторону JSON кодирования сервера, а затем расшифровывает JSon снова клиент стороны. Js изменения:

$.get(
    "' . Url::toRoute('week/getbatchdata') . '", 
    { id: $(this).val() } 
) 
.done(function(data) { 
    console.log(data); 
} 

Пожалуйста, убедитесь, что $(this).val() содержит значение, и что код внутри вашего действия возвращает правильные результаты.

+0

Работал отлично с почтой тоже. Проблема заключалась в том, что я пытался найти модель недели, которая еще не существует, поэтому я просто начал использовать Batch :: find ($ id) -> one(). –

0

проверить метод форм поведения контроллера и убедитесь, что получить-периодические данные приведены там

public function behaviors() 
{ 
    return [ 
     'access' => [ 
      'class' => AccessControl::className(), 
      'only' => ['get-batch-data'], 
      'rules' => [ 
       [ 
        'actions' => ['get-batch-data'], 
        'allow' => true, 
        'roles' => ['@'], 
       ], 
      ], 
     ], 
     'verbs' => [ 
      'class' => VerbFilter::className(), 
      'actions' => [ 
       'logout' => ['post'], 
      ], 
     ], 
    ]; 
} 

Makre обязательно использовать верблюд случае для действия контроллера

public function actionGetBatchData() 
{ 
    Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 
    $id = Yii::$app->request->post('id'); 
    $model = $this->findModel($id); 
    return $model->getBatch(); 
} 

Вашего элемент формы

<?= $form->field($model, 'batch_id')->dropDownList($BatchOptions, ['prompt'=>'Select Batch','onchange'=>' 
     $.post("'.Url::toRoute('week/getBatchData').'", { id: $(this).val() }) 
        .done(function(data) { 
      var BatchData = $.parseJSON(data); 
      console.log(BatchData); 
     }); 
    ']); ?> 
+0

Спасибо! использовал asnswer из http://stackoverflow.com/users/829493/jagsler, поскольку мне не нужно было добавлять элементы управления доступом. –