Переменные данных AJAX не читаются файлом php

Я столкнулся с проблемой, которую не могу понять. Я создаю простую кнопку, которая отправляет данные с помощью AJAX в файл php. У меня есть определенные переменные, и они отображаются правильно в консоли при нажатии кнопки, однако мой файл PHP не считывает переменные, которые я устанавливаю. Срабатывает оператор else в моем файле php.

Кто-нибудь понимает, почему переменные не устанавливаются в файле php?

HTML

<button class = "catalogDownload downloadButton" name = "Profile Catalog" id = "profileCatalogPDFButton" data-catalog-now = "Profile Popular Button" data-catalog-view-name = "Profile Catalog">Download Now</button>

AJAX

//Download Now AJAX
var catalog_name = '';
var button_triggered = '';
$('.downloadButton').on('click', function (event) {
    catalog_name = $(this).attr('name');
    button_triggered = $(this).data('catalog-now');
    console.info(catalog_name);
    $.ajax({
        url: 'urlhere.php',
        type: 'POST',
        data: {
            'catalog_name': catalog_name,
            'button_triggered': button_triggered
        },
        success: function (data) {
            //console.info(data);
        },
        error: function(xhr, textStatus, errorThrown) {
            alert(textStatus + "|" + errorThrown);
        },
        cache: false
    });
});

Файл PHP

ini_set('display_errors', 1);
error_reporting(E_ALL);

//$catalog_name = $_POST['catalog_name'];
if (isset($_POST['catalog_name'])){ 
    $catalog_name = $_POST['catalog_name'];
} else {
    echo 'Catalog Name is not reading';
}

что в сетевой консоли браузера? Идет ли запрос от браузера к серверу?

Robert 06.11.2018 22:25

@ Роберт Да, это так. Читает это Notice: Undefined variable: catalog_name in

Paul 06.11.2018 22:26

глядя на вставленный вами код, это невозможно. Вы уверены, что этот код выполняется? Возможно, перезапустите fpm или проверьте, является ли это файл, который вы выполняете

Robert 06.11.2018 22:29

Вы можете var_dump($_POST) посмотреть, есть ли там вообще что-нибудь? Если вы посмотрите на запрос в инспекторе сети вашего браузера, действительно ли он отправляет запрос POST и включены ли данные в запрос (как catalog_name=XXX&button_triggered=YYY)?

rickdenhaan 06.11.2018 22:36

Это ваше точное и полное определение функции ajax?

Patrick Q 06.11.2018 22:37

установите dataType: 'json' и повторите попытку

JMoura 06.11.2018 22:37

@rickdenhaan var_dump($_POST) отображает этот array(0) { }

Paul 06.11.2018 22:39
'catalog_name': попробуйте сбросить кавычки
Patrick Q 06.11.2018 22:40

@PatrickQ Пробовал без кавычек - без разницы. Таха, вынул пробел из названия - без разницы.

Paul 06.11.2018 22:42

Если $_POST - пустой массив, похоже, ваш браузер не отправляет POST-запрос. Вы проверяли запрос в инспекторе сети своего браузера?

rickdenhaan 06.11.2018 22:44

@rickdenhaan Я считаю, что POST работает. Сеть - Request URL: https://url.php Request Method: POST Status Code: 200 OK

Paul 06.11.2018 22:45

Включены ли данные в тело запроса?

rickdenhaan 06.11.2018 22:46

@rickdenhaan Нет, я понял. Catalog Name is not readingButton Triggered is not readingarray(0) { } <br /> <b>Notice</b>: Undefined variable: catalog_name in <b>/home.php</b> on line <b>36</b><br /> <br /> <b>Notice</b>: Undefined variable: button_triggered in <b>/home/.php</b> on line <b>36</b><br /> Connection failed: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'catalog_name' cannot be null

Paul 06.11.2018 22:48

Это похоже на тело отклик. Меня интересует тело запрос. Если jQuery работает правильно, он должен содержать данные либо в обычном формате HTTP (catalog_name=XXX&button_triggered=YYY), либо в формате JSON ({"catalog_name":"XXX","button_triggered":"YYY"}).

rickdenhaan 06.11.2018 22:50

Кажется, что-то устанавливает Content-Type в запросе на text/plain;charset=UTF-8, тогда как это должно быть что-то вроде application/x-www-form-urlencoded; charset=UTF-8

Patrick Q 06.11.2018 22:50

удалите эти ненужные вещи, такие как cache: false, contentType: false, processData: false, затем вместо объектов поместите строки в качестве значений данных и скажите мне, помогло ли это

Robert 06.11.2018 22:53

@rickdenhaan Я не знаю, где это получить - даже после поиска.

Paul 06.11.2018 22:53

@Paul это происходит из contentType: false

Robert 06.11.2018 22:55

@ Роберт Да, вы правы. Я просто удалил его, и он работает так, как должен. Спасибо и всем остальным за расширенную помощь!

Paul 06.11.2018 22:56

Было бы полезно увидеть ваш код полный, когда я спросил: «Это ваше точное и полное определение функции ajax?» (а еще лучше для начала)

Patrick Q 06.11.2018 22:56

Я отправлю его в качестве ответа, чтобы вы могли принять его, и вопрос будет закрыт, хорошо?

Robert 06.11.2018 22:56

@Paul для справки в будущем: этот вопрос имеет ответы, в которых подробно описано, как помочь отладить запросы в Chrome. Другие браузеры имеют аналогичные встроенные инструменты отладки.

rickdenhaan 06.11.2018 22:57

Кстати, вы можете прочитать это, но с использованием необработанного чтения из echo file_get_contents('php://input') вы можете попробовать в образовательных целях, и это также то, как вы должны читать json :)

Robert 06.11.2018 23:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
23
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Удалите из кода ненужные вещи, особенно contentType: false.

те должны быть удалены

cache: false, contentType: false, processData: false

когда вы устанавливаете для contentType значение false, заголовок Content-Type не будет установлен, и PHP не сможет прочитать переменные и поместить их в массив $ _POST

Из руководства:

$_POST - An associative array of variables passed to the current script via the HTTP POST method when using application/x-www-form-urlencoded or multipart/form-data

Если вы хотите прочитать его без установки Content-Type, вам нужно прочитать необработанный запрос с помощью

$postRequestContent = file_get_contents('php://input');

Другие вопросы по теме