我在Chrome浏览器控制台中使用Javascript / jQuery将数据发布到页面。 (我在Shopify管理员中这样做,因为它没有批量导入运费的能力)。
这是我正在使用的代码:
make_weight_based_shipping_rate(8267845, 98, 99, 'Test Shipping Rate', 59);
function make_weight_based_shipping_rate(cid, minWeight, maxWeight, name, price) {
$.post('/admin/weight_based_shipping_rates.json', {
weight_based_shipping_rate: {
country_id: cid,
name: name,
offsets: [{disabled:true, offset:0, province_id:145570341}, {disabled:true, offset:0, province_id:145570345}],
weight_high: maxWeight,
weight_low: minWeight,
price: price
}
});
}
它的效果很好,除了我的请求的一行有一个对象数组 - 以'offsets'开头的行。
如果我在这一行上只有一个JSON对象,而不是在数组中(通过排除方括号),则此代码可以正常工作。但是,作为一个数组,Shopify会返回错误“422(不可处理的实体)”,并在响应正文中显示“{”errors“:{”shipping_rate_offsets“:[”无效“]}}'。< / p>
我是否错误地格式化了此JSON对象?如果没有,是否有其他方法可以实现这一点,而不是使用JQuery Post方法?
答案 0 :(得分:0)
我最终弄明白了。默认情况下,JQuery POST和AJAX请求编码为“application / x-www-form-urlencoded”。这在大多数情况下都有效,但是当它获得诸如'offsets'之类的数组时它似乎失败了。
为了解决这个问题,首先我必须对提交的数据使用JSON.stringify()函数。然后在进行POST之前,我使用ajaxSetup()函数将content-type设置为“application / json”。我修改过的代码现在是:
make_weight_based_shipping_rate(8267845, 98, 99, 'Test Shipping Rate', 59);
function make_weight_based_shipping_rate(cid, minWeight, maxWeight, name, price) {
$.ajaxSetup({
contentType: "application/json; charset=utf-8"
});
$.post('/admin/weight_based_shipping_rates.json', JSON.stringify({
weight_based_shipping_rate: {
country_id: cid,
name: name,
offsets: [{disabled:true, offset:0, province_id:145570341}, {disabled:true, offset:0.00, province_id:145570345}],
weight_high: maxWeight,
weight_low: minWeight,
price: price
}
}));
}
我希望这有助于其他人。