Я пытался сохранить некоторые данные в.json файле с помощью ajax и php. На данный момент я получаю сообщение об ошибке, и мои данные не сохраняются и не могут понять, почему.
Это мой.js файл:
var data = {
"test": "helloworld"
}
$.ajax({
url: "save.php",
data: data,
dataType: 'json',
type: 'POST',
success: function (data) {
$("#saved").text("Data has been saved.");},
error: function (data){
$("#saved").text("Failed to save data !");}
});
И вот мой php файл:
$json = $_POST['data'];
if(json_decode($json) != null){
$file = fopen('web/js/data_save.json', 'w+');
fwrite($file, json_encode($json));
fclose($file);
}else{
print("<pre>Error saving data !</pre>");
}
Когда я пытаюсь сохранить ошибку ajax, срабатывает:
error: function (data){
$("#saved").text("Failed to save data !");
}
Надеюсь, кто-то может вести меня в правильном направлении :)
это отлично работает для меня
.js:
$(document).ready(function() {
var json_object = {"data": "helloworld"};
$.ajax({
url: "../tests/save.php",
data: json_object,
dataType: 'json',
type: 'POST',
success: function(json_object) {
console.log(json_object);
$("#saved").text("Data has been saved.");
},
error: function(json_object) {
console.log(json_object);
$("#saved").text("Failed to save data !");
}
});
});
.php
$post_data = $_POST['data'];
if (!empty($post_data)) {
$file = fopen('data_save.json', 'w+');
fwrite($file, json_encode($post_data));
fclose($file);
echo json_encode('success');
}
если вы выполните var_dump в $ _POST, вы увидите, что ваша переменная отправляется как массив в php. также вам нужно эхо-строку json для успеха обратного вызова
У вас нет ключевых data
в вашем запросе. Вам нужно разобрать весь тело запроса как JSON с помощью http_get_request_body
или что-то, чтобы получить исходное тело, чтобы получить http_get_request_body
результат.
EDIT: Похоже, что была некоторая путаница, вот некоторые дополнительные объяснения.
При отправке запроса JSON POST на PHP вы не можете использовать переменную $_POST
как с обычным запросом.
curl -H 'Content-Type: application/json' -d '{"foo": "bar"}' myhost/foo.php
с foo.php, определенным как ниже, напечатает пустой массив, попробуйте сами, если хотите.
<?php
print_r($_POST);
Когда вам нужно получить JSON из тела запроса POST, вам нужно получить все тело, а затем проанализировать его из JSON. Вы можете сделать это несколькими способами, одним из которых является тот, который я написал перед редактированием. Вы также можете получить все тело без использования какого-либо расширения, используя
file_get_contents('php://input')
Результат должен быть таким же.
Итак, с приведенным ниже кодом вы должны получить то, что хотите.
<?php
$json = json_decode(file_get_contents('php://input'), true);
print_r($json);
data
. Это затем передается как свойство данных вызова AJAX, поэтому он передается в PHP скрипт как почтовых данных, который , как она относится к нему. Что ты говоришь не так с этим?
data
?
data: JSON.stringify(data)