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

Javascript 如何使用JQuery发布对象的JSON数组,javascript,jquery,arrays,json,shopify,Javascript,Jquery,Arrays,Json,Shopify,我在Chrome浏览器控制台中使用Javascript/jQuery将数据发布到页面。(我在Shopify admin中这样做,因为它没有批量导入运费的功能) 这是我正在使用的代码: make_weight_based_shipping_rate(8267845, 98, 99, 'Test Shipping Rate', 59); function make_weight_based_shipping_rate(cid, minWeight, maxWeight, name, price)

我在Chrome浏览器控制台中使用Javascript/jQuery将数据发布到页面。(我在Shopify admin中这样做,因为它没有批量导入运费的功能)

这是我正在使用的代码:

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
    }
  });
}
它工作得很好,除了我请求的一行有一个对象数组——以“offset”开头的行

如果此行中只有一个JSON对象,而不是在数组中(不包括方括号),那么这段代码可以工作。但是,作为一个数组,Shopify返回时出现错误“422(不可处理实体)”,并且在响应的主体中显示“{”错误“:{”发货率偏移“:[“无效”]}”


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

我最终找到了答案。默认情况下,JQuery POST和AJAX请求编码为“application/x-www-form-urlencoded”。这在大多数情况下都是有效的,但当它得到一个数组(如“offset”)时,它似乎失败了

为了解决这个问题,首先我必须对提交的数据使用JSON.stringify()函数。然后在发表文章之前,我使用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
    }
  }));
}

我希望这能帮助其他人。

您的javascript(而不是JSON)看起来不错。不幸的是,这看起来像是Shopify处理该领域的一个问题——可能是服务提供了某种支持?你会得到一个更准确的答案。谢谢RGraham-这是一个我看到其他人描述的解决方法。我不确定Shopify是否欣赏人们做这种事情——这不是他们官方API的一部分。我看到了你的帖子。看起来这些家伙公开发布了这些代码,所以我要说他们对支持它相当开放:)另外,我问了他们的一位支持人员一个关于API的问题,他们说把它发布在这里。。!谷歌的好用:)我希望他们会回答,但我认为StackOverflow的应用范围会更广。