php не видит данные ajax, хотя по логам они проходят

Есть форма, с нее данные передаются через ajax на php. Вернувшийся ответ записывается в отдельный div. Стал разбираться что не так, упростил php по максимуму. В итоге отладчик показывает что данные приняты, но php их как будто не видит.

ajax:

$(function(){
      var reg_message = $('#reg_message');
      $('#submitReg').on('click', function(){
      var dat1 = {
            email: $('#InputEmail').val(),
            login: $('#InputLogin').val(),
            pass: $('#InputPassword').val(),
            repeatPassword: $('#RepeatPassword').val(),
            agree: $('#Check').val()
                }
      var dat = JSON.stringify(dat1);
        $.ajax({
          url: 'testreg1.php',
          type: 'POST',
          data: dat,

          success: function(ans){
            document.getElementById("reg_message").innerHTML = ans;
            document.getElementById("test_message").innerHTML = dat;
          }

        });
      });
});

testreg1.php:

<?php
if(isset($_POST['dat'])) {
    echo "Goog";
} else {
    echo "Error";
}
?>

Скрипт всегда выводит Error. В консоли в пунктах "Данные форм" и "Полезная нагрузка" выводит полученный json dat.

введите сюда описание изображения


Ответы (2 шт):

Автор решения: Androeed Hack

Попробуйте поставить EventLeastener на событие submit, используйте функцию event.preventDefault(); (для отмены обновления страницы при отправке). В testreg1.php сделайте var_dump($_POST), и посмотрите какие данные вам пришли. Советую вам попробовать такую форму:

 $('form').on('submit', function(event){
   event.preventDefault();        
   $.ajax({
        url: 'testreg1.php',
        type: 'POST',
        data: $(this).serialize(),
        success: function(ans){
                 console.log(ans)
         },
         error: function (xhr, ajaxOptions, thrownError) {
            console.log(xhr.status);
            console.log(thrownError);
      }

         });
→ Ссылка
Автор решения: axmed2004

Ошибка в том что вы проверяете в массиве POST ключ 'dat'. А у вас в js это переменная которая содержит объект с ключами email, login, pass и т.д. Вот их и повторяйте в php: $_POST['email'] , $_POST['login'] .....

→ Ссылка