#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
, что поддерживается только новыми браузерами. Старые браузеры могут плохо работать с этим типом контента.