Конвертация json строки в js объект

396
25 июня 2017, 16:51

В php файле есть массив который передается так:echo json_encode($new_content);. Его принимает функция, заданная при успешном выполнении AJAX запроса. Но почему то вместо того что бы нормально конвертироваться с json строки в js объект я получаю [object Object]. Подскажите почему

Вот php

<?php
session_start();
$user = $_SESSION['user'];
$message = $_POST['message'];
$time = date('H:i:s');
$file = "../data/messages.json";
$json_content = json_decode(file_get_contents($file), true);
$content = array();
if(is_array($json_content)) {
    $content = $json_content;
}
if (!empty($message)) {
    $content[] = array("time" => $time, "user" => $user, "message"  => $message);
    $new_content = array();
    $i = 0;
    foreach($content as $key => $id) {
        $new_id = $id;
        $new_id['id'] = $i;
        $new_content[$id['user'] ] = $new_id;
        $i++;
    }
    file_put_contents($file, json_encode($new_content, JSON_PRETTY_PRINT),FILE_APPEND);
}
echo json_encode($new_content);
?>

Вот JS

$(document).ready(function(){
    $('#easyForm').submit(function(){
        var text = $('#text').val();
        $.ajax({
            type : 'POST',
            url  : 'php/chat_script.php',
            data : {
                message:text
            },
            success: function(arr) {
                arr = $.parseJSON(arr);
                $('#time').html(arr.time);
                $('#name').html(arr.user);
                $('#message').html(arr.message);
            }
        });
        return  false;
    });
});

Вот содержание массив

{"qwe":{"time":"20:57:55","user":"qwe","message":"qwe","id":0}}

Answer 1

И будет вам счастье, а еще есть такая штука как arr = JSON.stringify(arr)

Вариант 2 более правильный

header('Content-Type: application/json');
echo json_encode($new_content);
?>

$(document).on('ready', function(){
    $('#easyForm').submit(function(e){
        var text = $('#text').val();
        $.ajax({
            type : 'POST',
            url  : 'php/chat_script.php',
            dataType: 'json',
            data : {
                message:text
            },
            success: function(data) {
                $('#time').html(data.time);
                $('#name').html(data.user);
                $('#message').html(data.message);
            }
        });
        e.preventDefault();
        e.stopPropagation();
        return false;
    });
});
Answer 2

Вы не указали в опциях $.ajax тип ожидаемого ответа. jQuery очень старается передать в обработчик success, то, что по мнению библиотеки, Вы хотели возвратить. В данном случае, это правильно квалифицировано как текст формата JSON, который уже преобразован в js объект, который и подан параметром в success.

Строку

arr = $.parseJSON(arr);

нужно убрать.

Update

Массива я не вижу, а вижу объект с одним свойством qwe, у которого, есть свойства: time, user, message и id

$('#time').html(arr.qwe.time);
$('#name').html(arr.qwe.user);
$('#message').html(arr.qwe.message);
READ ALSO
Как узнать время жизни csrf токена в laravel 5.2?

Как узнать время жизни csrf токена в laravel 5.2?

One page application, все на аяксе, возникает проблема что если страница долго открыта и без действий токен протухает и user не может понять что случилось,...

386
Настройка сервера через vnc

Настройка сервера через vnc

Хостинг предоставил ssh и vnc все рутовое

335
вопрос про оптимизацию mysql + php

вопрос про оптимизацию mysql + php

здравствуйте, на сайте есть система рангов, чем больше у тебя баллов, тем выше ранг

278
Замена одного значения на другое в строке

Замена одного значения на другое в строке

Есть исходная строка Тип_разъема=AM4&Количество_ядер=4, в которой необходимо заменить AM4 и 4 на 'AM4' и '4' соответственно

424