Я столкнулся с проблемой, которую не могу понять. Я создаю простую кнопку, которая отправляет данные с помощью 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';
}
@ Роберт Да, это так. Читает это Notice: Undefined variable: catalog_name in
глядя на вставленный вами код, это невозможно. Вы уверены, что этот код выполняется? Возможно, перезапустите fpm или проверьте, является ли это файл, который вы выполняете
Вы можете var_dump($_POST) посмотреть, есть ли там вообще что-нибудь? Если вы посмотрите на запрос в инспекторе сети вашего браузера, действительно ли он отправляет запрос POST и включены ли данные в запрос (как catalog_name=XXX&button_triggered=YYY)?
Это ваше точное и полное определение функции ajax?
установите dataType: 'json' и повторите попытку
@rickdenhaan var_dump($_POST) отображает этот array(0) { }
'catalog_name': попробуйте сбросить кавычки
@PatrickQ Пробовал без кавычек - без разницы. Таха, вынул пробел из названия - без разницы.
Если $_POST - пустой массив, похоже, ваш браузер не отправляет POST-запрос. Вы проверяли запрос в инспекторе сети своего браузера?
@rickdenhaan Я считаю, что POST работает. Сеть - Request URL: https://url.php Request Method: POST Status Code: 200 OK
Включены ли данные в тело запроса?
@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
Это похоже на тело отклик. Меня интересует тело запрос. Если jQuery работает правильно, он должен содержать данные либо в обычном формате HTTP (catalog_name=XXX&button_triggered=YYY), либо в формате JSON ({"catalog_name":"XXX","button_triggered":"YYY"}).
Кажется, что-то устанавливает Content-Type в запросе на text/plain;charset=UTF-8, тогда как это должно быть что-то вроде application/x-www-form-urlencoded; charset=UTF-8
удалите эти ненужные вещи, такие как cache: false, contentType: false, processData: false, затем вместо объектов поместите строки в качестве значений данных и скажите мне, помогло ли это
@rickdenhaan Я не знаю, где это получить - даже после поиска.
@Paul это происходит из contentType: false
@ Роберт Да, вы правы. Я просто удалил его, и он работает так, как должен. Спасибо и всем остальным за расширенную помощь!
Было бы полезно увидеть ваш код полный, когда я спросил: «Это ваше точное и полное определение функции ajax?» (а еще лучше для начала)
Я отправлю его в качестве ответа, чтобы вы могли принять его, и вопрос будет закрыт, хорошо?
@Paul для справки в будущем: этот вопрос имеет ответы, в которых подробно описано, как помочь отладить запросы в Chrome. Другие браузеры имеют аналогичные встроенные инструменты отладки.
Кстати, вы можете прочитать это, но с использованием необработанного чтения из echo file_get_contents('php://input') вы можете попробовать в образовательных целях, и это также то, как вы должны читать json :)






Удалите из кода ненужные вещи, особенно 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');
что в сетевой консоли браузера? Идет ли запрос от браузера к серверу?