2013-10-04 3 views
2

Я использую Javascript/jQuery в консоли браузера Chrome для отправки данных на страницу. (Я делаю это в Shopify admin, потому что у него нет возможности для массовых импортных тарифов на доставку).Как разместить массив объектов JSON с помощью JQuery

Это код, я использую:

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 (Unprocessable Entity)», а в теле ответа он говорит «{« errors »: {" shipping_rate_offsets ": [" недействителен "]}} '.

Я неправильно форматирую этот объект JSON? Если нет, можно ли каким-то другим способом добиться этого, а не использовать метод JQuery Post?

+2

Ваш Javascript (не JSON) выглядит отлично. К сожалению, это похоже на проблему с тем, как Shopify обрабатывает это поле - предположительно, служба предоставляет некоторую поддержку? Вы получите гораздо более точный ответ. – CodingIntrigue

+0

Спасибо RGraham - это обходной путь, который я видел, когда кто-то еще описывает. Я не уверен, что Shopify ценит людей, которые делают такие вещи - это не часть их официального API. – Garrulinae

+0

Я видел ваше сообщение [здесь] (http://ecommerce.shopify.com/c/payments-shipping-fulfilment/t/bulk-import-shipping-options-134653). Похоже, что ребята публиковали этот код публично, поэтому я бы сказал, что они довольно открыты для его поддержки :) – CodingIntrigue

ответ

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

Я надеюсь, что это поможет другим.

Смежные вопросы