这是我的JSON文件
"shipping":{
"countries":{
"150":{
"id":150,
"code":"nl",
"title":"Nederland"
}
},
"country":150,
"zipcode":null,
"methods":{
"core|13490|40699":{
"id":"core|13490|40699",
"title":"ophalen",
"description":"ophalen",
"content":false,
"pickup":true,
"cod":false,
"price":{
"price_excl":"0.0000",
"price_incl":"0.0000"
}
},
"core|10292|40718":{
"id":"core|10292|40718",
"title":"Pakketdienst",
"description":"Pakketdienst",
"content":false,
"pickup":false,
"cod":false,
"price":{
"price_excl":"33.5714",
"price_incl":"39.9500"}
}
}
}
我的脚本如下所示:
function bakVormShipping(targetClass){
$.getJSON('http://shop.com/cart/?format=json', function(data){
var methods = ''
$.each(data.cart.shipping.methods, function(index, methods){
if (index == "core|10292|40696") {
$('<span></span>').html('<strong>' + methods.price.price_incl + '</strong>').appendTo(targetClass);
}
else if (index == "core|10292|40693") {
$('<span></span>').html('<strong>' + methods.price.price_incl + '</strong>').appendTo(targetClass);
}
else if (index == "core|10292|40718") {
$('<span></span>').html('<strong>' + methods.price.price_incl + '</strong>').appendTo(targetClass);
}
});
});
}
首先一些小解释。您看到的json是从“购物车”页面调用的。您看到的第一种方法是送货方式:在商店提货。第二个用于实际运送。我想将第二个(实际运送)加载到我商店的不同页面上。这样人们就可以知道运输成本是多少。所有产品均基于重量,因此当产品重量更大时,运输成本将更改为id为“ core | 10292 | 40693”和“ core | 10292 | 40718”(请参见代码)的方法,并且所有价格都偏离航线。所有这些都是动态的,因此json将始终具有提货方法和实际的运送方法。
我试图实现的是
a)缩短代码。例如,如果(index ==“ core | 10292 | 40696” ||“ core | 10292 | 40693” ||“ core | 10292 | 40718”)不起作用并打印出提货方式和实际运输方式。
b)用两位小数将输出转换为货币。我搜索了这个论坛,但无法在此代码上使用它。该代码现在显示39.9500而不是39.95
c)我想摆脱
$('<span></span>')
,因为代码现在可以打印范围中的所有内容。我尝试使用$(methods),但是给出了“未定义”错误。显然是因为var methods =
是“空”而没有执行任何操作。是否有人有指导或愿意提供帮助?我是JSON和jquery的新手,请耐心等待。
最佳答案
a)if (index == "core|10292|40696" || "core|10292|40693" || "core|10292|40718")
不起作用
要在index
等于这些值中的任何一个值时执行某项操作,您需要这样做:
if (index == "core|10292|40696" || index == "core|10292|40693"
|| index == "core|10292|40718")
b)用两位小数将输出转换为货币。
目前,您的货币金额为字符串。以下使用unary plus operator将
price_incl
从字符串更改为数字,然后使用.toFixed()
method将它们四舍五入到小数点后两位:(+methods.price.price_incl).toFixed(2)
出现在
+methods.price.price_incl
周围的括号是因为没有它们,对.toFixed(2)
的方法调用将比一元加号具有更高的运算符优先级。c)我想摆脱
$('<span></span>')
,因为代码现在可以打印范围中的所有内容。您可以像创建跨度一样创建强元素,即,将html字符串传递给
$()
函数(然后像您已经将结果附加到targetClass
一样):$('<strong>' + methods.price.price_incl + '</strong>').appendTo(targetClass);
// OR, possibly easier to read but definitely more compact:
$('<strong/>').html(methods.price.price_incl).appendTo(targetClass);
// OR with the rounding included:
$('<strong/>').html((+methods.price.price_incl).toFixed(2)).appendTo(targetClass);