JavaScript中的8个POST资源请求不工作 我在MauliLe1.1基金会8中遇到了一个问题,其中一个POST请求中的参数没有在适配器中被捕获,但是在GET请求中,该参数工作正常。

JavaScript中的8个POST资源请求不工作 我在MauliLe1.1基金会8中遇到了一个问题,其中一个POST请求中的参数没有在适配器中被捕获,但是在GET请求中,该参数工作正常。,javascript,post,ibm-mobilefirst,mobilefirst-adapters,Javascript,Post,Ibm Mobilefirst,Mobilefirst Adapters,获取请求的示例 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)}

获取请求的示例

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)
    };
}
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)
    };
}
输出

{\'result\':\'sd\',\'issusccessful\':true}

POST请求示例

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)
    };
}
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)
    };
}
适配器侧

function unprotected(user){
    return {
        result:JSON.stringify(user)
    };
}
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\”:true}

在请求后适配器端,参数为
undefined


另外,在我的开发控制台->swagger中,如果我点击POST请求表单查询
[{“params”:“['sd','ds']”}]
其工作正常,但从cordova应用程序无法解析参数,但在同一cordova应用程序中,GET Request工作正常。

更新:注意,您应该将发出请求的方式更改为以下内容:

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
值,我可以在应用程序服务器的messages.log文件中看到以下两行记录器,即使我只有一行记录器:

[10/9/16 10:57:00:643 IDT]00000 EC7 MFP.记录器I*********参数值为:sd
[10/9/16 10:57:00:646 IDT]00000 F3E MFP.记录器I*********参数值为:未定义


一个有价值,另一个没有。。。我假设未定义的一个返回给客户端,这就是为什么没有结果值(?)

更新:注意,您应该更改向以下对象发出请求的方式:

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
值,我可以在应用程序服务器的messages.log文件中看到以下两行记录器,即使我只有一行记录器:

[10/9/16 10:57:00:643 IDT]00000 EC7 MFP.记录器I*********参数值为:sd
[10/9/16 10:57:00:646 IDT]00000 F3E MFP.记录器I*********参数值为:未定义


一个有价值,另一个没有。。。我假设未定义的参数返回给客户端,这就是为什么没有得到结果值(?)。

问题是您误用了sendFormParameters()API。 正确使用(异步承诺)JavaScript API。 在示例中,可以使用SendFormParameters()或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。 使用带有POST和空正文的MFP v8.0资源请求时:内容类型必须设置为application/x-www-form-urlencoded 如果与send()API结合使用。 Android代码将失败(iOS工作正常)。 简单的解决方法:在编写WLResourceRequest时,手动添加HTTP“Content Type”头,如下所示:

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...

问题是您误用了sendFormParameters()API。 正确使用(异步承诺)JavaScript API。 在示例中,可以使用SendFormParameters()或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。 使用带有POST和空正文的MFP v8.0资源请求时:内容类型必须设置为application/x-www-form-urlencoded 如果与send()API结合使用。 Android代码将失败(iOS工作正常)。 简单的解决方法:在编写WLResourceRequest时,手动添加HTTP“Content Type”头,如下所示:

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...

如果您在POST调用中尝试使用queryparameters呢?工作正常吗?
.setQueryParameter
用于GET请求。带有将给出“不支持的媒体类型”的帖子。我相信@deena117可能在这里发现了一个缺陷……您发送了两次请求。一次使用表单主体,一次不使用主体。如果在POST调用中尝试queryparameters呢?工作正常吗?
.setQueryParameter
用于GET请求。带有将给出“不支持的媒体类型”的帖子。我相信@deena117可能在这里发现了一个缺陷……您发送了两次请求。一次带形体,一次不带形体。你有一个带棱角的例子吗?只是无法让它工作。@Idan Adar是否可以使用Javascript适配器将日志写入服务器中的文件?是否有一个使用Angular的工作示例?只是无法让它工作。@Idan Adar是否可以使用Javascript适配器将日志写入服务器中的文件