Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Yii2 ajax bad request (#400)

When I use this code, I get this error as a response:

Bad Request (#400): Not possible to verify your data

/**
 * Active toggle
 */
$(document).on('click', '[data-toggle-active-menu-items]', function(e){

    e.preventDefault();

    var id = $(this).data('toggle-active-menu-items');

    $.ajax({
        url: 'active',
        type: 'POST',
        data: {'id': id, _csrf: yii.getCsrfToken()}, 
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(data) {
            if (data.active == 1)
            {
                $('#list-' + id + ' [data-toggle-active-menu-items]').html('<span class="glyphicon glyphicon-eye-open"></span>');
            } else {
                $('#list-' + id + ' [data-toggle-active-menu-items]').html('<span class="glyphicon glyphicon-eye-close"></span>');
            }
        }
    });
});

I tried adding

_csrf: yii.getCsrfToken()

and

contentType: "application/json; charset=utf-8",
dataType: "json",

but that's not working

it does work when I add this to my controller, but that's no good, I don't want to disable csrf validation

public $enableCsrfValidation = false;

How can I fix this?

like image 836
Ruben Avatar asked Jul 31 '14 09:07

Ruben


3 Answers

  $.ajax({
    url: '$urlSave',
    type: 'post',
    data: {payload: payload, _csrf: yii.getCsrfToken()},        
    dataType: 'json',
  }).success(function(response) {
  });

other examples: http://docs.mirocow.com/doku.php?id=yii2:docs#добавление_csrftoken_в_ajax_запрос_yii2

like image 58
Mirocow Avatar answered Nov 14 '22 20:11

Mirocow


You can try this way. It's work!

var csrfToken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
         url: 'request',
         type: 'post',
         dataType: 'json',
         data: {param1: param1, _csrf : csrfToken},
});
like image 24
Phong Đỗ Avatar answered Nov 14 '22 20:11

Phong Đỗ


Add this code at the bottom of your layout:

<script>
    $.ajaxSetup({
        data: <?= \yii\helpers\Json::encode([
            \yii::$app->request->csrfParam => \yii::$app->request->csrfToken,
        ]) ?>
    });
</script>
like image 6
Oleg Avatar answered Nov 14 '22 21:11

Oleg