На сервер не приходят данные переданные методом POST через AJAX (без jquery)

213
16 августа 2017, 19:40

Отправляю данные на сервер через AJAX в рамках одного домена, но сервер ничего не получает.

js файл

var data = {
      rating : result,
      message : message
    };
var request = new XMLHttpRequest();
request.open('POST', '/test.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');
request.send(data);

Отправка идёт по клику на элементе (не форма, не кнопка submit)

star[i].addEventListener('click', selectStar);

php файл

$data = $_POST["data"];

$data оказывается пустой

Интересно, что если подключаю jquery все работает

$.ajax({
   type: 'POST',
   url: '/test.php',
   data: {data:data}
});

Пробовал:

  • Искать в гугле и здесь. Все что нашёл - попробовал, не помогло.
  • Убрать весь остальной js код — не помогло.
  • Передавать на сервер не объект а строку — ничего не меняется.
  • менять протоколы (http и https) и версию php на сервере (с 4 по 7) - без результатов.

Уже пару дней над этим сижу. Очень буду рад советам и помощи. Спасибо!

Answer 1

Отправьте так:

var data = 'rating=' + encodeURIComponent(result) +
           '&message=' + encodeURIComponent(message);
var request = new XMLHttpRequest();
request.open('POST', '/test.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send(data);

И проверьте что пришло:

var_dump($_POST);
Answer 2

Добро пожаловать на StackOverflow.

В варианте с XMLHttpRequest Вы отправляете

{"rating":123,"message":"aaa"}, 

а в коде с $.ajax - отправляете

{"data":{"rating":123,"message":"aaa"}}

Получайте значения на сервере вот так:

var data = {
  rating : result,
  message : message
};
...
request.send($.param(data));
...
$rating = $_POST["rating"];
$message = $_POST["message"];

или

var data = {
  data: {
    rating : result,
    message : message
  }
};
...
request.send($.param(data));
...
$data = $_POST["data"];
READ ALSO
Запись в БД через POST

Запись в БД через POST

так работает:

209
PHP - получить url страницы

PHP - получить url страницы

На странице выполняется php скриптАдрес страницы типа: site

149
Как используя ActionColumn скрыть/показать кнопки в определенной строке?

Как используя ActionColumn скрыть/показать кнопки в определенной строке?

Использую стандартный GridView::widgetПодскажите как в ActionColumn отобразить по условию в одной строке только просмотр ({view}), а в другой просмотр и удаление...

180
Когда стоит делать класс абстрактным?

Когда стоит делать класс абстрактным?

Проект saas-сервис типа мегапланаВ голове есть приблизительная структура классов, например: работа с БД, работа с задачами, сервисный класс...

166