1

这是我的 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 很陌生,所以请耐心等待。

4

1 回答 1

3

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) 将输出转换为带两位小数的货币。

目前,您的货币金额是字符串。下面使用一元加号运算符price_incl字符串转换为数字,然后使用该.toFixed()方法将它们四舍五入到小数点后两位:

(+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);
于 2012-05-29T00:58:41.683 回答