Ajax не передает переменную на другую страницу? - PullRequest
2 голосов
/ 11 апреля 2019

Я хочу сохранить пользователя email в базе данных, когда он нажимает кнопку подписки. Но когда я ввожу электронную почту и нажимаю кнопку подписки, она пропускает пустой массив!

Код формы подписки:

<form id="cx-subscribe-user">
    <input type="text" name="email" id="email" placeholder="Enter Your Email" />
    <button type="submit" id="subscribe-button">Subscribe</button>
</form>

Js код:

$('#cx-subscribe-user').on('click', function (e) {
    e.preventDefault();
    var email = $('#email').val();
    $.ajax({
        type: "GET",
        url: "subscribe-the-user.php",
        processData: false,
        dataType: 'json',
        data: {email: email},
        success: function(data) {
            console.log('saved scucess');
        }
    });
});

В subscribe-the-user.php файле я пытаюсь var_dump запрос, но он печатает пустой массив:

var_dump($_GET);exit;

В var_dump Я получаю этот пустой массив array(0) {}

Ответы [ 4 ]

5 голосов
/ 11 апреля 2019

удалите processData, как указано в документации, ваш запрос испортится

processData (по умолчанию: true)

Тип: Boolean

По умолчанию данные передаются в к параметру данных в качестве объекта (технически, ничего, кроме string) будет обработан и преобразован в строку запроса, подходящую к типу содержимого по умолчанию "application / x-www-form-urlencoded". Если Вы хотите отправить DOMDocument или другие необработанные данные, установите это вариант ложный. https://api.jquery.com/jQuery.ajax/

2 голосов
/ 11 апреля 2019

Проблема в том, что вы используете событие onclick() для объекта <form>, поэтому, как только вы нажмете в поле ввода электронной почты, чтобы добавить некоторые данные, событие onclick() будет запущено, и запрос ajax произойдет безлюбые данные в полях email, отправляющие пустой параметр email в PHP.

Измените форму onclick() на кнопку click() или форму submit()

$('#subscribe-button').on('click', function (e) {

Также удалить processData: false, [на основе документации: - Документация jQuery ajax ]

processData (по умолчанию: true) Тип:Boolean По умолчанию данные, передаваемые в параметр data как объект (технически, что угодно, кроме строки), будут обрабатываться и преобразовываться в строку запроса, соответствующую типу содержимого по умолчанию "application / x-www-form-urlencoded». Если вы хотите отправить DOMDocument или другие необработанные данные, установите для этого параметра значение false.

1 голос
/ 11 апреля 2019

Письма должны быть зашифрованы перед отправкой запроса

$.ajax({
    url: "ajax.php",
    type:'get',
    data: { email: encodeURIComponent(email)},
    dataType: 'json',
    success: function(response) {
      //Do Something
    },
    error: function(xhr) {
    //Do Something to handle error
    }
});
1 голос
/ 11 апреля 2019

Вы можете сделать это, используя POST метод

$('#cx-subscribe-user').on('click', function (e) {
    e.preventDefault();
    var email = $('#email').val();
    $.ajax({
        type: "POST",
        processData: false,
        dataType: 'json',
        data: {email: email},
        url: "subscribe-the-user.php",
        success: function(data) {
            console.log('saved success');
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...