这是我的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 operatorprice_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);

10-01 09:56