В плагине использую такой ajax-запрос с типом GET:
var data = [{"x":66.5,"y":192,"time":2},{"x":66.5,"y":192,"time":27},{"x":66.5,"y":192,"time":58}];
$.ajax({
type: 'GET',
url: '/site/request',
data: 'data=' + JSON.stringify(data),
contentType: 'application/json; charset=utf-8',
dataType: "json",
success: function (res) {
if (!res) console.log('Ошибка');
console.log(res);
},
error: function (exception) {
console.log('Exeption:' + exception);
}
})
Все вроде работает. На сервер данные передаются.
Но много данных так не передашь, и поэтому мне нежен тип post.
Меняю 'GET' на 'POST', данные также передаются, но скрипт отрабатывает ошибку, и браузер выдает код '500 Internal Server Error'. Не пойму где ошибка.
На сервере (php7) тестовый скрипт просто записывает массив $_POST в файл.
public function actionRequest()
{
$result = Yii::$app->request->post();
file_put_contents('test.txt', print_r($result, true));
return true;
}
В логах только это:
"POST /site/request HTTP/1.1" 500 1597 "http://test/site/test" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36"
Решение вопроса:
После еще несколько часов гугления и мучений я вроде нашел решение.
1) Первая ошибка была в параметрах запроса
contentType: 'application/json; charset=utf-8'
Если закомметировать эту строку, и оставить дефолтный заголовок
'application/x-www-form-urlencoded; charset=UTF-8'
данные появится в массиве $_POST.
2) Вторая ошибка в том, что работая с yii2 (это касается и CodeIgniter) вместе с данными оказывается надо передавать csrf-токен.
data: {data: data, _csrf: yii.getCsrfToken()},