如何使用JQuery发布JSON对象数组

时间:2013-10-04 06:59:01

标签: javascript jquery arrays json shopify

我在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方法?

1 个答案:

答案 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
    }
  }));
}

我希望这有助于其他人。