2015-01-10 117 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",   
     } 

不是很直觀,但它對我很好用!

相關問題