2016-09-22 5 views
0

Я пытаюсь сохранить базу данных в yii2 с помощью ajax, но я получаю ошибки. Я просто хочу вставить значение или скорость, которая «вверх» в базу данных, и я не хочу использовать форму, просто нажав кнопку.Сохранить в базе данных yii2

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

 public function actionThumbs() 
     { 
      $thumbs = new Thumbs; 

      $thumbs->user = Yii::$app->user->identity->email; 
      $thumbs->topic_id = Yii::$app->getRequest()->getQueryParam('id'); 
      $thumbs->rate = $_POST["rate"]; 

      if ($thumbs->load(Yii::$app->request->post())) { 
       $thumbs->load($_POST); 
       $thumbs->save(); 
       return $this->redirect(['blog', 'id' => Yii::$app->getRequest()->getQueryParam('id')]); 
      } 

      return $this->redirect(['blog','id' => Yii::$app->getRequest()->getQueryParam('id')]); 
     } 

Это мой, это мой Аякса файл

$("#mys").click(function() { 

    var rate = "up"; 

    $.ajax({ 
     type: 'POST', 
     url: 'vot/frontend/web/index.php?r=site%2Fthumbs', 
     data: 'rate='+rate, 
     success: function (rate) { 
      alert("test"); 
     }, 
     error: function (exception) { 
      alert(exception); 
     } 
    }); 
}); 

вид

<div> 
    <?= Html::Button('ups', ['class' => 'btn btn-primary', 'name' => 'mys' ,'id'=>'mys']) ?> 
</div> 

Я получаю эту ошибку ALERT

The page at localhost says": 
"[object Object]" 
+0

Сделайте 'var_dump ($ thumbs);' перед и внутри 'if'. Каковы значения объекта? –

+0

Вместо '' 'alert (exception)' '' use '' 'console.log (exception)' '' и использовать средства разработки браузера для изучения того, что находится в этой переменной. Вы должны увидеть сообщение, объясняющее ошибку. – cronfy

+0

Я заметил, что вы не указали параметр 'id', который вы используете здесь' Yii :: $ app-> getRequest() -> getQueryParam ('id'); 'Также в вашем действии эти две вещи повторяются и ошибочны:' if ($ thumbs-> load (Yii :: $ app-> request-> post())) {'и' $ thumbs-> load ($ _ POST); 'Оба они одинаковы, но ничего не делают. Мой совет: сначала убедитесь, что ваше действие работает правильно, а затем используйте его в ajax. – leninhasda

ответ

2

По умолчанию контроллер Yii2 не принимает запрос POST без _csrf защиты, так что есть 2 способа здесь:

1 - отключить CSRF:

public function actionThumbs() { 
    $this->enableCsrfValidation = false; 
    //your code here 
} 

2 - Отправить запрос пост через AJAX с _csrf маркером : В файле layout/main.php, поставить это: <?= Html::csrfMetaTags() ?>

Перед вашим "Аякса" кода, назвать это:

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') 
    } 
}); 
//Your ajax code here 
+0

все еще дает мне ту же ошибку .. и когда я проверяю элемент, я вижу (анонимная функция) \t @ \t top.js: 9 – arinze

Смежные вопросы