javascript — отправка массива JSON в веб-сервис из Google Sheet Script

У нас есть веб-сервис, который возвращает информацию о продукте. Служба ожидает массив JSON в данных поста …

Пример скрипта с простой тестовой веб-страницы HTML выглядит следующим образом (это работает, как и ожидалось):

ltscript src = "// code.jquery.com/jquery-1.11.2.min.js"></ скрипт>

<script type = "text / javascript">

$ (Документ) .ready (функция () {

// запрос - это массив идентификаторов продуктов, например ПИД-регулятор: [71,72,74]

// запрос - это массив поисковых терминов, например найти: [ 'яблоки', 'апельсины', 'груши']
// запрос может содержать запрашиваемые поля из продуктов
// fields: ['CostPrice', 'Опубликовано', 'title', 'Price']

jQuery.ajax ({
URL: 'http://somewebsite.com/__getProductData',
тип: 'POST',
dataType: 'json',
данные: {pid: [658,71,6,700], поля: ['pid', 'CostPrice', 'type', 'опубликовано', 'title']},

success: function (data) {

// сделать что-то с ответом ...

});},

error: function (jqXHR, textStatus, errorThrown) {alert ('Error Error:' + textStatus + 'Error:' + errorThrown); }

}

);});

</ скрипт>

Веб-сервис, написанный на PHP, получает это правильно. Сброс (print_r) данных, полученных веб-службой от клиента, приводит к следующему массиву:


Array (
[pid] => Array ([0] => 658 [1] => 71 [2] => 6 [3] => 700)

[fields] => Array ([0] => pid [1] => CostPrice [2] => type [3] => type [4] => опубликованный [5] => заголовок)

Теперь к проблеме …. Я пытаюсь вызвать веб-сервис из скрипта Google Sheet следующим образом:

функция getProduct (pid, datetime) {

//
var url = 'https://somewebsite.com/__getProductData';

// pid: [658,71,6,700], поля: ['pid', 'CostPrice', 'type', 'опубликовано', 'title']

var nids = new Array (658,71,6,700);

var fields = ['pid', 'CostPrice', 'type', 'опубликовано', 'заголовок']
переменная полезная нагрузка =
{
pid: nids,
поля: поля

};

вар параметры =
{
«метод»: «POST»,

«полезная нагрузка»: полезная нагрузка};

var response = UrlFetchApp.fetch (url, параметры);

Logger.log (ответ);}

Когда веб-сервис PHP вызывается из скрипта Google Sheets, массив JSON не получен правильно:

Array ([data] => {pid = [Ljava.lang.Object; @ 1bfbb500} fields = [Ljava.lang.Object; @ 3ffbb500})

Я ожидаю, что это связано с кодировкой или заголовками … Я пробовал большинство комбинаций заголовков и contentType, но безрезультатно … например.

var headers = {"Accept": "json",
"Content-Type": "применение / JSON",
};

Предложения кого-нибудь?

0

Решение

var options = {
"method":  'POST',
"payload": JSON.stringify(payload)
};

Или зачеркните каждое из значений для pid & поля.

0

Другие решения

Джонатан — твой предложенный комментарий — решение ….

Это не сработало:

var options =
{
"method": 'POST',
"payload": JSON.stringify(payload)
};

но stringify на элементах массива полезной нагрузки работал (обратите внимание, что простые элементы работали без stringify, например, ‘text’: «некоторый текст здесь»):

 var nids = [658,71,6,700 ];
var fields = ['pid','CostPrice','type','published','title']
var payload =
{
pid : JSON.stringify(nids),
fields: JSON.stringify(fields)
};
var options =
{
"method": 'POST',
"payload": payload
};
0

Я думаю, что я решил ту же проблему:
Как отправить почтовый запрос с массивом в полезной нагрузке по urlfetchapp

полезная нагрузка должна быть подготовлена ​​таким образом! Я нашел это решение во время создания обходного сценария PHP.

  var payload =
{
"fields[0]":"firstString",
"fields[1]":"anotherString in array",
}

Не очень интуитивно понятно, но у меня получилось отлично!

0
По вопросам рекламы [email protected]