无法调用适配器过程
Posted
技术标签:
【中文标题】无法调用适配器过程【英文标题】:Unable to invoke adapter procedure 【发布时间】:2015-06-01 15:04:17 【问题描述】:我正在使用 IBM MobileFirst 创建一个应用程序。我已经创建了一个 HTTP 适配器,现在我正在我的 main.js 文件中调用响应。这是 invokeProcedure 调用(invocationData var 调用适配器和该适配器内的过程):
WL.Client.invokeProcedure(invocationData,
onSuccess : loadSuccess(),
onFailure : loadFailure(),
);
现在,我已经定义了一个 loadSuccess() 和一个 loadFailure() 函数(在调用之前声明)(简单用于测试目的):
var loadSuccess = function(result)
alert("success");
alert(result.invocationResult);
var loadFailure = function(result)
alert("failure");
alert(result.invocationResult);
但是,虽然“成功”和“失败”会闪烁,但“结果”会返回为空。我见过的每个教程都成功地使用了这些方法,所以我很困惑为什么我的类似实现不起作用。此外,invokeProcedure 函数似乎正在调用并闪烁成功和失败选项的结果!
当我刚刚测试时,我的适配器会返回一个适当的响应,那么为什么数据的调用不能正常工作呢? IBM 文档不是很清楚,所以我很感激任何和所有的建议!
编辑:
我将 main.js 更新为以下代码:
function loadSuccess(result)
alert("success");
function loadFailure(result)
alert("failure");
function testFunc(userid, password)
var invocationData =
adapter : 'myAdapter',
procedure : 'myProc',
parameters : [ userid, password ],
;
WL.Client.invokeProcedure(invocationData,
onSuccess : loadSuccess,
onFailure : loadFailure
);
当我测试我的适配器时,只需调用它,响应就成功并包含我想要的所有响应信息。那么为什么这里不调用 onSuccess 呢?
【问题讨论】:
请提供以下内容:适配器代码 - authenticationConfig.xml - main.js 认证配置文档的链接developer.ibm.com/mobilefirstplatform/documentation/… 【参考方案1】:您可能需要从 onSuccess 和 onFailure 声明中删除参数括号,否则它会在分配时而不是在需要时运行函数:
WL.Client.invokeProcedure(invocationData,
onSuccess : loadSuccess,
onFailure : loadFailure
);
【讨论】:
我试过这个...当我删除括号时,loadSucces 和 loadFailure 函数根本不会被调用,因此“成功”警报和“失败”警报甚至都不会出现。跨度> 好吧,我很确定你不想要括号,因为函数不返回任何东西。如果没有更多信息,我不知道还有什么问题。 由于适配器位于服务器上,我认为您接下来要检查的是跨源请求安全性,并确保为您的测试环境配置了服务器以进行端口访问。【参考方案2】:由于您使用“var”来定义您的 onSuccess/onFailure 回调,因此请确保它们在同一范围内。尝试提供内联回调,例如
WL.Client.invokeProcedure(invocationOptions,
onSuccess: function(data) alert....,
onFailure: function(data) alert....
)
【讨论】:
因为他在使用他的原始代码时看到他们“闪烁”警报,我认为他的范围是正确的。 @Radio 因为括号而闪烁,正如您在回答中指出的那样。我还建议使用开发控制台查看是否抛出了一些 JS 异常。 谢谢,我知道它们在闪烁是因为括号。它们也在闪烁,因为它们正在被发现,因此范围不是问题。将它们重写为 lambda 函数并不能证明什么。 IMO 他接下来需要关注安全性。 developer.ibm.com/mobilefirstplatform/documentation/…【参考方案3】:您必须在 html 文件中声明 initOptions.js 、 main.js 和 messages.js ,这将使用指向您的适配器的控制器..
否则 invokeProcedure 将是未定义的
只需转到您的 html 文件,但此代码直接在结束标记之前的正文标记末尾
<script src="js/initOptions.js"></script>
<script src="js/main.js"></script>
<script src="js/messages.js"></script>
【讨论】:
以上是关于无法调用适配器过程的主要内容,如果未能解决你的问题,请参考以下文章
无法在 MobileFirst V8.0 Consumer Edition 中调用适配器过程
IBM Worklight - 无法从客户端调用插入查询的 SQL 适配器过程。我的编码有啥问题?
无法从 Worklight Liberty 服务器中的 HTTP 适配器调用 java 类