WL.Server.getClientRequest()在WL适配器过程方法中返回null

时间:2014-05-19 20:38:18

标签: adapter ibm-mobilefirst

我想访问从WL客户端发送的请求标头。当我使用这个

var request = WL.Server.getClientRequest();

在适配器过程调用中,它返回null并在

之后的行上导致错误
var userAgent = request.getHeader("User-Agent");

错误为:无法调用null

的方法“getHeader”

为了使用此WL api呼叫,是否需要任何特殊设置?

2 个答案:

答案 0 :(得分:1)

API WL.Server.getClientRequest()仅在从客户端(来自设备或甚至预览)调用时才有效,而不是直接从Eclipse调用时。

例如:
在适配器XML中,我创建了一个过程:

<procedure name="getUserAgent"/>

在适配器JavaScript中,我创建了一个名为getUserAgent的函数,它将userAgent返回给客户端:

function getUserAgent() {
    var request = WL.Server.getClientRequest(),
        userAgent = request.getHeader("User-Agent");
    return {userAgent : userAgent};
}

在客户端Javascript中,我创建了一个从wlCommonInit调用的函数。该函数调用适配器过程,返回的userAgent显示在警报中:

function wlCommonInit(){
    getUserAgent();
}

function getUserAgent () {
    WL.Client.invokeProcedure(
            {
                adapter: 'getClientRequest',
                procedure: 'getUserAgent',
            },
            {
                onSuccess : onSuccessGetUserAgent,
                onFailure : onFailureGetUserAgent
            }
        );
}

function onSuccessGetUserAgent (data) {
    alert('userAgent: ' + data.invocationResult.userAgent);
}

function onFailureGetUserAgent () {
    alert('Failure');
}

答案 1 :(得分:0)

看起来Studio中使用的适配器调用阻止了对传入客户端请求的访问。基本上,当您使用Eclipse的“Invoke Worklight Procedure”选项时,getClientRequest()不起作用。你可以在这里做的是 - 一旦你做“调用Worklight程序”,浏览器将打开一个类似于此的URL

   http://{serverIP}:{serverPort}/{projectName}/dev/invoke?adapter={adapterName}&procedure={procedureName}&parameters={params}

从URL中删除/ dev组件。因此,您的网址将如下所示

   http://{serverIP}:{serverPort}/{projectName}/invoke?adapter={adapterName}&procedure={procedureName}&parameters={params}

这将确保不通过开发预览调用适配器,而是直接从WL服务器调用适配器,getClientRequest()API将完全正常运行。

P.S。当“调用Worklight过程”未打开外部浏览器窗口而是在Eclipse窗口中显示调用结果时,您可能会遇到一种行为。这取决于您正在使用的Eclipse版本,并且可以在Eclipse的首选项中轻松更改 - &gt;一般 - &gt;网络浏览器 - &gt;使用外部网络浏览器。