2

我在 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
    }
  });
}

它运行良好,除了我的请求中包含一组对象的行 - 以“偏移量”开头的行。

如果我在这一行上只有一个 JSON 对象,而不是在数组中(通过排除方括号),则此代码有效。但是,作为一个数组,Shopify 返回错误“422(无法处理的实体)”,并在响应正文中显示“{"errors":{"shipping_rate_offsets":["is invalid"]}}'。

我是否错误地格式化了这个 JSON 对象?如果没有,是否有其他方法可以实现这一点,而不是使用 JQuery Post 方法?

4

1 回答 1

0

我最终想通了。默认情况下,JQuery POST 和 AJAX 请求被编码为“application/x-www-form-urlencoded”。这在大多数情况下都有效,但是当它获得诸如“偏移量”之类的数组时似乎会失败。

为了解决这个问题,首先我必须对提交的数据使用 JSON.stringify() 函数。然后在进行 POST 之前,我使用 ajaxSetup() 函数将内容类型设置为“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
    }
  }));
}

我希望这对其他人有帮助。

于 2013-10-07T01:25:32.173 回答