我的服务器(PHP)响应JSON对象,就像这样的数据:
{
"0": {
"action_id": "80",
"action_transaction_id": "5743",
"action_matched_email": "test_1@gmail.com",
"action_by_user": "user1",
"action_count": "0",
"action_date": "2017-07-19 15:01:26"
},
"1": {
"action_id": "1",
"action_transaction_id": "1",
"action_matched_email": "Admin@email.com",
"action_by_user": "ADMIN",
"action_count": "4",
"action_date": "2017-07-19 15:10:08"
},
"new_count": {
"action_count": "4"
}
}
数据不受限制,有时服务器会抛出许多数据。这取决于条件是什么。
这是我成功后的ajax:
success: function(data, status, jqXHR) {
$.each(data, function(i, row) {
document.getElementById("hidden_counter").value = "";//new_count value here
var allRows =window.parent.document.getElementsByClassName('row'+row.action_transaction_id+'');
for (var i = 0; i < allRows.length; i++) {
allRows[i].style.backgroundColor = '#008e00';
allRows[i].style.color = '#f0fff0';
//should exclude the last array when updating the bgcolor and style color of the row
}
});
}
我有两件事要知道和做。
如何获取最后一个对象?
"new_count": {
"action_count": "4"
}
这样我就可以将隐藏的输入值更新为它。
答案 0 :(得分:2)
你不应该将纯js与jquery混合使用:
success: function(data, status, jqXHR) {
$('#hidden_counter').val(data.new_count.action_count);
$.each(data, function(i, row) {
if (row.action_transaction_id === undefined) {
return;
}
$('.row' + row.action_transaction_id).css({
backgroundColor: '#008e00',
color: '#f0fff0'
});
});
}
答案 1 :(得分:1)
如果您的对象名称是jsondata
,那么访问new_count
即可使用,
jsondata.new_count
如果您想访问最后一个元素,则可以通过
访问它jsondata.new_count.action_count
答案 2 :(得分:1)
如何获取最后一个对象?
对象键未排序,并按特定于浏览器的顺序检索。所以你可以尝试做的是获取密钥列表并获取最大值。
如前所述,这应该可以解决问题:
var lastIndex = Math.max.apply(null, Object.keys(object).map(Number))
如何在更新行样式时排除最后一个对象?
您可以在length - 1
或者您可以尝试使用CSS选择器:
var selector = '.row' + row.action_transaction_id + ':not(:last-child)';
var allRows = window.parent.document.querySelectorAll(selector);
// OR since you are using jQuery
var allRows = $(window).parent().find(selector)
// OR
var selector = '.row' + row.action_transaction_id;
var allRows = $(window).parent().find(selector).not(':last-child')
答案 3 :(得分:0)
第一部分:获取具有最大索引的元素(= length - 1)
第二:循环索引0中的所有元素直到索引&lt;长度为1的
var lastArrayElement = allRows[allRows.length - 1];
var action_count = lastArrayElement.action_count;
// loop all but last element:
for(var i=0; i<allRows.length-1;i++){
do_something(allRows[i]); //custom function
}
假设:
修改
实际上allRows.length不起作用,因为它是一个对象(包含纯数值作为属性)。 Object.keys(allRows)。length将为您提供计数范围属性。但是,它会给你3作为计数中的最后一个文本索引。
var max = 0;
for(i = 0; i < Object.keys(allRows).length;i++) {
if(parseInt(Object.keys(allRows)[i]) > max) {
max = Object.keys(allRows)[i];
}
}
然后是最后一个元素
var lastArrayElement = allRows[max];
答案 4 :(得分:0)
您可以使用Object.keys
success: function(data, status, jqXHR) {
var lastKey = Object.keys(data)[Object.keys(data).length-1];
$.each(data, function(i, row) {
if (i== lastKey) { /* It's the last key */ }
...
请注意,对于旧版浏览器,您可能需要使用该链接中包含的polyfill。
答案 5 :(得分:0)
试试这个:
$.each(data, function(i, row) {
if(row["action_count"])
{
document.getElementById("hidden_counter").value = row["action_count"];
}
else
{
var allRows =window.parent.document.getElementsByClassName('row'+row.action_transaction_id+'');
for (var i = 0; i < allRows.length; i++) {
allRows[i].style.backgroundColor = '#008e00';
allRows[i].style.color = '#f0fff0';
}
}
});