Создание канала JSON с использованием PHP для использования с jQuery

#php #javascript #jquery

#php #JavaScript #jquery

Вопрос:

Редактировать: решается с помощью приведенного ниже предложения по удалению: echo '{"results":'.json_encode($arr).'}'; и замене на echo json_encode($arr);

Это в сочетании с заменой этих строк:

 var items = [];
        $.each(data, function(key, val) {
            $.each(val, function(key, val)
            {
                    //Test insert into box using customer number
                $("#chatbox").html(val.number);
            });
        });
  

с

 $.each(data, function(key, val) {
$("#chatbox").html(this.number);
});
  

Теперь я могу получить доступ к данным объекта, используя this свойство, за которым следует нужное мне свойство.

Завершение редактирования

Привет, кто-нибудь может помочь мне с этим каналом JSON. Я почти справился с этим (я думаю), однако всякий раз, когда я помещаю этот канал в jQuery, он выбирается нами как строка, а не как массив объектов JSON, и я не могу понять, почему.

PHP для создания канала:

 <?php
session_start();

include 'connect.php';

    $number = $_SESSION['number'];

    $query = "SELECT * FROM $tableName WHERE number='$number'";

    $result = mysql_query($query, $sqlCon);

    $arr = array();
    while($obj = mysql_fetch_object($result)) {
        $arr[] = $obj;
    }

    if (count($arr) == 0)
    {
        echo "Your reference number is: $number";
    } else {
        echo '{"results":'.json_encode($arr).'}';
    }
?>
  

Возвращаемый JSON выглядит следующим образом:

 {"results":[{"id":"40","number":"466741","message":"dsfdsv","date":"2011-10-05","time":"00:28:32"},{"id":"41","number":"466741","message":"sacsac","date":"2011-10-05","time":"00:30:17"}]}
  

Вместо этого я хочу:

 [{"id":"40","number":"466741","message":"dsfdsv","date":"2011-10-05","time":"00:28:32"},{"id":"41","number":"466741","message":"sacsac","date":"2011-10-05","time":"00:30:17"}]
  

Или возвращаемое значение, которое позволило бы мне перебирать объекты.

jQuery, с помощью которого я его читаю:

 $.getJSON('get.php', function(data) {

var items = [];
    $.each(data, function(key, val) {
        $.each(val, function(key, val)
        {
                //Test insert into box using customer number
            $("#chatbox").html(val.number);
        });
    });
});
  

Я предполагаю, что моя проблема заключается в том, как я создаю канал JSON, но я просто застрял и не могу понять, как это исправить.

Любая помощь будет оценена, спасибо.

Комментарии:

1. заменить echo '{"results":'.json_encode($arr).'}'; на echo json_encode($arr);

2. Редактировать: хорошо, откажитесь от этого: это действительно работает, как мне затем извлечь, например, числовое значение?

Ответ №1:

Вы должны установить заголовки из PHP, чтобы указать, что это содержимое json. Это не обязательно на 100%, но хорошая практика, и вы увидите, что тип содержимого правильно анализируется в таких инструментах, как firebug.

 header('Content-type: application/json');
  

Вы оборачиваете свой json-контент ключом результатов, который вы не ищете в своем javascript, поэтому вам нужно либо удалить эту часть, либо искать ее в своем javascript. Поскольку вы говорите, что вам нужен массив, а не объект с ключом / значением результатов, просто замените echo '{"results":'.json_encode($arr).'}'; на echo json_encode($arr);

Комментарии:

1. Да, мне нужен массив, чтобы я мог затем перебирать его (я новичок в JS, можете ли вы сказать = P) и извлекать, например, числовое значение для каждого объекта JSON.

2. Я считаю application/json , что поддерживается только новыми браузерами. Старые браузеры могут плохо работать с этим типом контента.