Я работаю над этим довольно долго, и я прочитал TONS сообщений на SO, пытаясь понять, как мне нужно это делать, и я не могу заставить его работать. Я думаю, что это должен быть какой-то аспект того, как я закодировал вещи. Так опускайте вниз, но, надеюсь, какая-то душа поможет мне.
Я тестировал с помощью jsonlint, который возвращается. Я получаю ответ от сервера со значениями, я просто не могу ничего получить в браузере, кроме как когда я просто предупреждаю (ответ) ;. Мне нужно иметь возможность получить доступ к значению "cat_id_PK" и другим элементам отдельно для прокрутки и отображения их в ячейках таблицы html.
JSON:
{
"income": [
{
"cat_id_PK": 14,
"cat_name": "test1",
"cat_amount": "100.00"
},
{
"cat_id_PK": 15,
"cat_name": "test2",
"cat_amount": "200.00"
},
{
"cat_id_PK": 34,
"cat_name": "test3",
"cat_amount": "300.00"
},
"expense": [
{
"cat_id_PK": 14,
"cat_name": "tes41",
"cat_amount": "400.00"
},
{
"cat_id_PK": 15,
"cat_name": "test5",
"cat_amount": "500.00"
},
{
"cat_id_PK": 34,
"cat_name": "test6",
"cat_amount": "600.00"
}
]
}
PHP
$array = array(
'income' => $income,
'expense' => $expense,
'recurring' => $recurring
);
echo json_encode($array);
Jquery
var request = $.ajax({
type: "POST",
url: 'inc/functions.php',
dataType: "JSON",
data: {action: "display_categories", cur_month:cur_month}
});
request.done(function(response){
//for each element put values in <td></td> tags.
});
"Я тестировал с помощью jsonlint, который возвращается".
Нет, это не так, а не для JSON, который вы указали, который имеет ошибку: он не имеет закрытия ]
после }
и перед запятой в строке до "expense" :...
Но, возможно, это просто опечатка в вашем вопросе, учитывая, что вы создаете JSON с помощью json_encode()
(что не приведет к такой ошибке).
"Я просто не могу ничего получить в браузере, кроме как когда я просто
alert(response);
Тогда вы получаете какую-то ценность.
"но если я просто предупредил
response[0]
, он вернет только первый символ массива JSON".
Да, это потому, что response
- это строка - необработанная строка, содержащая JSON, где то, что вы хотите, - это проанализировать эту строку, чтобы получить объект. За исключением того, что вам не нужно делать это вручную, потому что jQuery будет делать это автоматически, как только вы добавите dataType:"json"
в ваши $.ajax()
.
"Я действительно отсутствовал в этом типе данных, но даже после его добавления, независимо от того, что я пытаюсь, я получаю
[Object:Object]
или undefined. Я буквально ничего не делаю, кроме какalert(response);
Когда вы добавите dataType:"json"
параметр response
будет объектом, который при попытке оповещения будет корректно отображаться как [object Object]
. Если вы используете console.log(response)
то в консоли браузера вы увидите фактический объект. Если вы попытаетесь получить доступ к свойству, которое не существует, вы получите undefined
.
"Мне нужно иметь доступ к значению
cat_id_PK
и другим элементам отдельно для циклическогоcat_id_PK
и отображения их в ячейках таблицы html".
Объект response
имеет два свойства, income
и expenses
, оба из которых являются массивами объекта. Поэтому используйте response.income
для доступа к первому массиву объектов и response.expenses
для доступа ко второму массиву объектов. Первый элемент дохода - response.income[0]
а свойство, о котором вы просили, - response.income[0].cat_id_PK
. Таким образом, вы можете использовать цикл for
или использовать $.each()
для итерации по массиву и сделать что-то с каждым свойством .cat_id_PK
:
var request = $.ajax({
type: "POST",
url: 'inc/functions.php',
dataType: "json",
data: {action: "display_categories", cur_month:cur_month}
});
request.done(function(response){
//for each element put values in <td></td> tags.
var tr = $("<tr></tr>");
// using traditional for loop for income items
for(var i = 0; i < response.income.length; i++) {
$("<td></td>").text(response.income[i].cat_id_PK).appendTo(tr);
}
tr.appendTo("#idOfTableHere");
var tr = $("<tr></tr>");
// use equivalent jQuery $.each for expense items
$.each(response.expenses, function(i, v) {
$("<td></td>").text(v.cat_id_PK).appendTo(tr);
});
tr.appendTo("#idOfTableHere");
});
Код, который я показал, создает новые td-элементы в каждом цикле, добавляя их к новым строкам таблицы, а затем после каждого цикла новая строка добавляется в таблицу, которую я предположил, уже существует на вашей странице с id="idOfTableHere"
,
$("<td id='" + response.income[i].cat_id_PK + "'></td>").text("some text here").etc...
или $("<td></td>", { id : response.income[i].cat_id_PK }).etc...
следует это сделать.
попробуйте это, вы пропустите dataType:
var request = $.ajax({
type: "POST",
url: 'inc/functions.php',
data: {action: "display_categories", cur_month:cur_month},
dataType:"json",
});
request.done(function(response){
//for each element put values in <td></td> tags.
});
.success()
или.done()
?