2016-10-08 80 views
1

我在MobileFirst Foundation 8.0中遇到問題,其中POST請求中的參數未在適配器中捕獲,但在GET請求中參數工作正常。 \ 「\」 SD \:IBM MobileFirst Foundation 8.0 POST資源請求在JavaScript中不起作用

爲GET請求

var url = "/adapters/samplePOST/unprotected/"; 
var resourceRequest = new WLResourceRequest(url, WLResourceRequest.GET); 
resourceRequest.setQueryParameter("params","['value1','value2']"); 
resourceRequest.send().then(function(e){console.log(e)}, function(e){console.log(e)}); 

適配器側

function unprotected(user){ 
    return { 
     result:JSON.stringify(user) 
    }; 
} 

輸出

{\ 「結果\」 實施例「\」,\ 「isSuccessful \」:真正}

爲POST請求

客戶端

var url = "/adapters/samplePOST/unprotected/"; 
var resourceRequest = new WLResourceRequest(url, WLResourceRequest.POST); 
var data={"params": "['sd','ds']"}; 
resourceRequest.sendFormParameters(data); 
resourceRequest.send().then(function(e){console.log(e)}, function(e){console.log(e)}); 

適配器側

function unprotected(user){ 
    return { 
     result:JSON.stringify(user) 
    }; 
} 

輸出例

{\ 「isSuccessful \」:真}

在POST請求適配器側,所述參數是undefined

另外,在我的開發控制檯 - > swagger中,如果我點擊POST請求表單查詢[{"params": "['sd','ds']"}]其工作正常,但來自cordova應用程序的參數無法解析,但在相同的cordova應用程序GET請求正常工作。

+0

,如果你嘗試在POST調用queryparameters什麼?這工作正常嗎? –

+1

'.setQueryParameter'用於GET請求。用POST會給「不支持的媒體類型」。我相信@ deena117可能在這裏偶然發現了一個缺陷...... –

+0

您正在發送您的請求兩次。一次用形體,一次用無形體。 –

回答

2

更新:記下您是如何發出請求到下面,你應該改變:

resourceRequest.sendFormParameters(data).then(
    function(e) { 
     console.log(e) 
    }, 
    function(e){ 
     console.log(e) 
    } 
); 

sendFormParameters實際發送請求,因此沒有必要也使用send。否則,你發送參數 - 兩次,這觸發了這個問題。


我試過了,我很奇怪。
在揚鞭我確實得到以下作爲響應體POST請求,你已經證明:

{ 
    "result": "\"value1\"", 
    "isSuccessful": true 
} 

但在應用程序中的result屬性是從響應對象丟失。

使用MFP.Logger.info我可以看到在應用程序服務器的消息以下記錄儀線打印適配器中param值。日誌文件,即使我只考了記錄儀行:

[16年10月9日10:57:00:643 IDT] 00000ec7 MFP.Logger我******** **參數值爲:sd
[10/9/16 10:57:00:646 IDT] 00000f3e MFP.Logger I **********參數值爲:undefined

一個與價值和另一個沒有...我想這個未定義的返回給客戶端,這就是爲什麼你沒有結果值(?)。

+0

你有沒有Angular的例子?只是不能得到它的工作。 – alex351

2

問題在於你誤用了sendFormParameters()API。 正確使用(異步承諾)JavaScript API。您的示例中的 使用sendFormParamters()或send(),但不能同時使用這兩個API。這兩個功能是實現相同目標的不同方式。

例如:

var resourceRequest = new WLResourceRequest(url, WLResourceRequest.POST); 
var data={"params": "['value1', 'value2']"}; 
var result = resourceRequest.sendFormParameters(data).then(
       function(response){ 
        alert ("responseText: " + response.responseText + " ** responseJSON: " + JSON.stringify(response.responseJSON)); 
       }, 
       function(err){ 
        alert (JSON.stringify(err)); 
       } 
); 

後來的API似乎沒有問題需要解決。

正在爲send()API打開PMR。 使用MFP v8.0資源請求時,POST和空體:如果與send()API結合使用,則內容類型必須設置爲application/x-www-form-urlencoded 。 Android代碼將失敗(iOS工作正常)。 簡單的解決辦法:寫WLResourceRequest時手動添加一個HTTP「內容類型」標題是這樣的:

var resourceRequest = new WLResourceRequest(url, WLResourceRequest.POST); 
    resourceRequest.setQueryParameter("params", "['value1', 'value2']"); 
    resourceRequest.setHeader('Content-Type','application/x-www-form-urlencoded'); 
    resourceRequest.send().then....more code here...