2014-01-27 4 views
1

для корзины покупок я добавляю ссылку «Добавить в корзину». Благодаря добавлению события «click» я делаю запрос POST. Система отвечает: «Не удается найти токен csrf»; Вот код:Невозможно найти токен CSRF, поскольку я пытаюсь отправить данные POST по ссылке в Yii

'add to cart' => array(
       'url'=>'Yii::app()->controller->createUrl("assortment/addtocart", array("id"=>$data[id], "YII_CSRF_TOKEN" => ' . Yii::app()->request->csrfToken. ', "csrf"=>' . Yii::app()->request->csrfToken . '))', 

       'click'=>"function(){ 
          $.fn.yiiGridView.update('assortment-grid', { 
           type:'POST', 
           url:$(this).attr('href'), 
          // data:{YII_CSRF_TOKEN: " . Yii::app()->request->csrfToken . "}, 
           /*success:function(data) { 
             $.fn.yiiGridView.update('assortment-grid'); 
           }*/ 
          }) 
          return false; 
          } 
         ", 
        ), 

Я добавил параметр «CSRF» в ссылке. Когда я раскомментирую data:{YII_CSRF_TOKEN: " . Yii::app()->request->csrfToken . "},, запрос POST становится простым перенаправлением GET (csrf проверено). Мне не нужно обновлять сетку, поэтому я прокомментировал success:function(data). Поскольку не должно быть перенаправления, мне нужно сохранить запрос POST и ajax. Вы можете посмотреть на скриншоты формы POST: enter image description here enter image description here

Как это исправить? Могу ли я передать csrf в качестве параметра POST? Могу ли я добавить кнопку отправки POST в CGridView?

ответ

1

убедитесь, что у вас есть этот код в конфиге

return array(
    'components'=>array(
     'request'=>array(
      'enableCsrfValidation'=>true, 
     ), 
    ), 
); 

добавить маркер, как скрытый вход (если необходимо):

$request = Yii:app()->getRequest(); 
echo CHtml::textField($request->csrfTokenName, $request->getCsrfToken()); 

и отправить все данные из формы

data: $('#formId').serialize() 
+0

* * Первое требование выполняется ** ''enableCsrfValidation' => true' ** Второе **: поскольку я добавляю' $ request = ... 'a fring Grid и Brasket Grid и это поле параметра csrf с помощью 'CHtml :: Form(); ... CHtml :: endForm(); '- этот параметр НЕ передается в POST. Я предполагаю, что эта ссылка с событием 'click' не является кнопкой отправки формы. ** Как только я добавляю ** данные: ... в JS, POST становится запросом GET. –

+0

' 'нажмите' => "JS:. Функция() { ' – cetver

+0

я исправил, и это по-прежнему то же самое Теперь у меня есть это: 'нажмите' =>" JS: функция() { \t \t \t \t \t \t \t \t $ .fn.yiiGridView.update ('ассортимент сетки', { \t \t \t \t \t \t \t \t \t типа: 'POST', \t \t \t \t \t \t \t \t \t URL: $ (это) .attr ('HREF'), \t \t \t \t \t \t \t \t \t данные [ 'YII_CSRF_TOKEN'] =». Yii :: app() -> request-> csrfToken."; \t \t \t \t \t \t \t \t}); \t \t \t \t \t \t \t \t возвращение ложным; \t \t \t \t \t \t \t} \t \t \t \t \t \t \t", –

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