我使用Laravel作为后端,使用jQuery作为前端。我得到了一个响应,它在一个对象中有一个数组,这个对象在主数组中(希望这是有意义的)。
这是我的对象的一部分:
{
"basket": [{
"id": 17,
"restaurant_id": 1,
"table_id": 1,
"item_id": 9,
"item_language_id": 37,
"price": "25.99",
"qty": 1,
"item": {
"id": 9,
"user_id": 1,
"restaurant_id": 1,
"category_id": 5,
"name": "Grilled Beef with potatoes",
"price": "25.99",
"short_description": "Meat / Potatoes / Rice / Tomatoe",
"itemlanguages": [{
"id": 37,
"user_id": 1,
"item_id": 9,
"lang_id": 9,
"restaurant_id": 1,
"category_id": 5,
"category_language_id": 21,
"name": "烤牛肉配土豆",
"price": "MVR 25.99",
"short_description": "肉/土豆/大米/西红柿",
"description": "<p>test</p>"
}]
}
}]
}basket是一个数组。里面是一个拥有itemlanguages数组的item对象。我想遍历basket,但显示itemlaguages name,price等,而不是从item。这是我到目前为止所尝试过的。
$.each(response.basket, function(index, val) {
$.each(this.item.itemlanguages, function(index, val) {
name = this.name;
short_description = this.short_description;
});
var name = null;
var short_description = null;
var qty = this.qty;
var price = this.price;
$('<span>' + name + ' | ' + short_description + ' | ' + qty + ' | ' + price + '</span>').appendTo(basket);
});我想我可以重复我通常做的事情,首先在response.basket上做each(),然后在里面做this.item.itemlanguages,但这不起作用。我尝试将这些值赋给一个变量。任何帮助都是非常感谢的。
发布于 2019-08-30 18:28:04
这个问题是因为name和short_description是在itemlanguages上的$.each循环中定义的,因此超出了您试图使用它们的外部$.each的范围。
要解决此问题,请将所有逻辑移入内部$.each。还要注意,您可以使用$.each的第二个参数来引用循环中的当前实体,以使语法更易于理解(因为使用的this关键字较少)。试试这个:
var response = {
"basket": [{
// other properties...
"price": "25.99",
"qty": 1,
"item": {
// other properties...
"itemlanguages": [{
// other properties...
"name": "烤牛肉配土豆",
"short_description": "肉/土豆/大米/西红柿"
}]
}
},{
// other properties...
"price": "999.00",
"qty": 2,
"item": {
// other properties...
"itemlanguages": [{
// other properties...
"name": "lorem ipsum dolor sit amet",
"short_description": "lorem ipsum"
}]
}
}]
}
var $basket = $('#basket');
$.each(response.basket, function(index, basket) {
$.each(basket.item.itemlanguages, function(index, itemlanguage) {
var name = itemlanguage.name;
var short_description = itemlanguage.short_description;
var qty = basket.qty;
var price = basket.price;
$('<span>' + name + ' | ' + short_description + ' | ' + qty + ' | ' + price + '</span>').appendTo($basket);
});
});span {
display: block;
}<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="basket"></div>
https://stackoverflow.com/questions/57724940
复制相似问题