我们有一个返回产品信息的网络服务。该服务期望在post数据中使用JSON数组......
来自简单HTML测试网页的示例脚本如下(这可以按预期工作):
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ // request is array of product IDs e.g. pid:[71,72,74] // request is array of search terms e.g. find:['apples','oranges','pears'] // request can contain requested fields from products // fields:['CostPrice','Published','title','Price'] jQuery.ajax({ url : 'http://somewebsite.com/__getProductData', type: 'POST', dataType : 'json', data: { pid:[658,71,6,700], fields:['pid','CostPrice','type','published','title'] }, success:function(data) { // do something with the response... }); }, error: function( jqXHR, textStatus, errorThrown) {alert('Error Status:' + textStatus + ' Error:'+errorThrown); } } ); }); </script>
用PHP编写的Web服务正确接收。从客户端转储(print_r)Web服务接收的数据会产生以下数组:
Array ( [pid] => Array ( [0] => 658 [1] => 71 [2] => 6 [3] => 700 ) [fields] => Array ( [0] => pid [1] => CostPrice [2] => type [3] => type [4] => published [5] => title )
现在问题....我正试图从Google Sheet Script中调用webservice,如下所示:
function getProduct( pid,datetime) { // var url = 'https://somewebsite.com/__getProductData'; //pid:[658,71,6,700], fields:['pid','CostPrice','type','published','title'] var nids = new Array( 658,71,6,700 ); var fields = ['pid','CostPrice','type','published','title'] var payload = { pid : nids, fields: fields }; var options = { "method": 'POST', "payload": payload }; var response = UrlFetchApp.fetch(url, options); Logger.log(response); }
从Google表格脚本调用PHP Web服务时,无法正确接收JSON数组:
Array ( [data] => { pid=[Ljava.lang.Object;@1bfbb500} fields=[Ljava.lang.Object;@3ffbb500})
我希望这是与编码或标题相关的东西......我尝试了大多数标题和contentType的组合,但无济于事......例如。
var headers = { "Accept":"json", "Content-Type":"application/json", };
建议任何人?
答案 0 :(得分:0)
var options = {
"method": 'POST',
"payload": JSON.stringify(payload)
};
或者将pid&amp;的每个值字符串化。字段。
答案 1 :(得分:0)
Jonathan - 您建议的评论是解决方案......
这没有用:
var options =
{
"method": 'POST',
"payload": JSON.stringify(payload)
};
但是对有效负载数组元素进行了字符串化(请注意,简单元素在没有字符串化的情况下工作,例如&#39; text&#39;:&#34;有些文字在这里&#34;):
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
};
答案 2 :(得分:0)
我想我已经解决了同样的问题: How to send a post request with an array in payload by urlfetchapp
有效载荷必须以这种方式准备!我在制作解决方法PHP脚本时发现了这个解决方案。
var payload =
{
"fields[0]":"firstString",
"fields[1]":"anotherString in array",
}
不是很直观,但它对我很有用!