Обновлено: я обновил свой код из-за обратной связи отсюда, и он больше не дает мне пустой массив, но теперь он просто дает мне нуль.
Обновлено еще раз: Кто-то в моей организации решил это для меня! Оказывается, я использовал параметры POST, которые мне не нужны. Мой рабочий код:
Внешний интерфейс:
$.ajax({
type: "POST",
url: "update_data_ajax.php",
data: {
events: JSON.stringify(currentEventsRows)
}
}).done(function(data) {
console.info("Done");
console.info(data);
});
Серверная часть:
echo json_encode($_POST);
Исходный пост:
Я пытаюсь сделать запрос AJAX POST для отправки некоторых данных в таблицу SQL, но не похоже, что мой запрос POST на самом деле что-то отправляет, потому что серверная часть PHP просто дает мне ноль.
Чтобы попытаться сузить проблему, я упростил свою страницу до внешнего интерфейса JavaScript, который публикует массив данных, и внутреннего интерфейса PHP, который просто возвращает данные. Вот соответствующая часть моей веб-страницы (update_data.php):
let currentEventsRows = [/* array of dicts of strings */];
$.ajax({
method: "POST",
url: "update_data_ajax.php",
contentType: "application/json; charset=utf-8",
dataType: "JSON",
data: JSON.stringify{
events: currentEventsRows
},
processData: false
}).done(function(data) {
console.info("Done");
console.info(data);
});
Вот мой бэкэнд PHP (update_data_ajax.php):
<?php
$_POST = json_decode(file_get_contents("php://input"), true);
echo $_POST;
?>
И вот вывод консоли:
Done
null
Что я делаю не так? Я чувствую, что упускаю что-то совершенно простое.
Это была ошибка при передаче кода. Спасибо, что указали на это, я обновлю свой вопрос.
Отвечает ли это на ваш вопрос? Получите JSON POST с PHP
@ADyson Это не так
Почему не точно?
Я должен был быть более конкретным. Ответ на этот вопрос был в основном тем, что предложил @Musa (ниже). Но спасибо за предложение - это действительно изменило мой код, поскольку он больше не возвращает пустой массив, а теперь просто возвращает ноль. Я отредактировал свой оригинальный пост.
Попробуйте также удалить processData:false, так как это не нужно. Кроме того, используйте echo json_last_error_msg();
в конце вашего PHP, чтобы увидеть, не пошло ли что-то не так при декодировании данных.
Также dataType: "JSON"
нежелательно использовать в JS, потому что в настоящее время ваш PHP не возвращает JSON.
Спасибо за предложения. json_last_error_msg()
дает мне Syntax error
(но это все, что он говорит - это не более конкретно, где ошибка). Но я проверил строку JSON, которая была отправлена на серверную часть, и не оказалось, что в ней есть какие-либо синтаксические ошибки.
Я предлагаю показать JSON здесь (версия, полученная PHP, а не версия, которую вы отправили — они должны быть идентичными, но...), чтобы мы могли взглянуть на это.
У вас есть 2 проблемы: 1. Вы неправильно отправляете JSON. 2. Вы неправильно читаете JSON.
Вы должны закодировать свой JSON для отправки вашего ajax-вызова
let currentEventsRows = [/* array of dicts of strings */];
$.ajax({
method: "POST",
url: "update_data_ajax.php",
contentType: "application/json; charset=utf-8",
dataType: "JSON",
data: JSON.stringify({
events: currentEventsRows
})
// processData: false -- not needed since the JSON is a string
}).done(function(data) {
console.info("Done");
console.info(data);
});
Ваши данные JSON не заполняются в суперглобальном $_post (это происходит только для multipart/form-data и application/x-www-form-urlencoded), поэтому вы должны прочитать их из php://input
<?php
echo file_get_contents('php://input');
?>
Я внес предложенные вами изменения, но теперь вместо "[]" выводится "null".
Кто-то из моей организации фактически решил это для меня. Оказывается, я использовал параметры POST, которые мне не нужны.
Внешний интерфейс:
$.ajax({
type: "POST",
url: "update_data_ajax.php",
data: {
events: JSON.stringify(currentEventsRows)
}
}).done(function(data) {
console.info("Done");
console.info(data);
});
Серверная часть:
echo json_encode($_POST);
У вас опечатка в
datatType
- это в реальном коде или просто случайная ошибка при переносе кода на вопрос?