2015-01-10 78 views
0

我们有一个返回产品信息的web服务。该服务预计在后数据的JSON阵列...的从Google Sheet脚本发送JSON数组到webservice

从一个简单的HTML测试网页A示例脚本如下(此按预期工作):

 
    &ltscript 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> 

Web服务,编写在PHP中,正确接收这个。转储(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) 

现在的问题....我试图调用从谷歌表脚本的Web服务如下:

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


    } 

当PHP Web服务是由谷歌表脚本调用JSON数组不正确地接收:

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

我希望这是与编码或他相关的东西aders ...我已经尝试过大多数标头和contentType的组合,但无济于事。

 
    var headers = { "Accept":"json", 
       "Content-Type":"application/json", 
      }; 

建议任何人?

+0

作为一种解决方法,由于您可以访问PHP代码,而不是提供JSON,请提供HTML,并请求URL GET参数。 – Kriggs

回答

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

或将pid &字段的每个值串联起来。

0

乔纳森 - 你的建议的评论是该解决方案....

这不起作用:

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

但字符串化的有效载荷数组元素的工作(注意,简单的元素,而无需如字符串化工作'文': “有些文字在这里”):

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

我thinkg我已经解决了同样的问题: How to send a post request with an array in payload by urlfetchapp

有效载荷必须以这种方式准备!我在制作解决方法PHP脚本期间找到了这个解决方案。

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

不是很直观,但它对我很好用!

相关问题