Сохранение данных ajax POST с помощью PHP

-2

Я пытался сохранить некоторые данные в.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 !");
     }

Надеюсь, кто-то может вести меня в правильном направлении :)

  • 0
    data: JSON.stringify(data)
  • 0
    Если jQuery запускает ваш обратный вызов с ошибкой, то ваш запрос, очевидно, как-то не выполняется. Лучше всего проверить с помощью инструментов разработчика (инспектор, firebug и т. Д.), Какие запросы отправляются и какой ответ вы получаете с сервера.
Показать ещё 1 комментарий

2 ответа

1

это отлично работает для меня

.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 для успеха обратного вызова

  • 0
    Спасибо, теперь это сработало, поэтому моей проблемой была моя переменная, она должна была быть $ _POST ['test']; Огромное спасибо за помощь, а также приятно иметь console.log! :)
-1

У вас нет ключевых 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);
  • 0
    Первое, что делает пример кода, это создает объект с именем data . Это затем передается как свойство данных вызова AJAX, поэтому он передается в PHP скрипт как почтовых данных, который , как она относится к нему. Что ты говоришь не так с этим?
  • 0
    Где объект называется data ?
Показать ещё 12 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню