2

我正在使用 IBM Worklight Developer Edition 5.0.5 来尝试创建简单的(HTML 和适配器)应用程序,但面临未解决的问题。

这可能是旧论坛中没有回答的相同问题: http ://www.ibm.com/developerworks/forums/thread.jspa?threadID=460738

[环境] OS:Windows7 64bit(日文语言环境),Eclipse:4.2.1,Worklight:Developer Edition 5.0.5

[描述] 我在 Eclipse 中创建了 Worklight Project,没有任何外部库,如 jQuery mobile 或 Dojo。我在这个项目中添加了 HTTP 适配器和 SQL 适配器。当我尝试“运行为 ..-> 调用 Worklight 过程”时,两者似乎都可以正常工作。两者都返回了预期的 JSON。所以我认为适配器不会有问题。

但是当我从 HTML 文件中调用这些适配器时,我在 worklight.js(行:2380)中出现“未捕获的类型错误:无法使用 'in' 运算符在 null 中搜索 'SUPPORT_COOKIES'”错误。

[我的代码]

var invocationData = { 适配器:'SQLAdapter',过程:'getCount',参数:[] };

WL.Logger.debug("1: invocationData = " + invocationData);
WL.Client.invokeProcedure(invocationData, { onSuccess: loadFeedsSuccess, onFailure: loadFeedsFailure });

WL.Logger.debug("2: loadFeeds");

函数 loadFeedsSuccess( 结果 ){ WL.Logger.debug( "3: 成功: 结果 = " + 结果); }

function loadFeedsFailure(result){ WL.Logger.debug("4: failure: result = " + result); }

[我的调试控制台输出]

1:invocationData = [object Object] worklight.js:1112

未捕获的类型错误:无法使用“in”运算符在 null worklight.js:2380 中搜索“SUPPORT_COOKIES”

wlclient init 启动 worklight.js:1112

之前:app init onSuccess worklight.js:1112

之后:app init onSuccess worklight.js:1112

wlclient 初始化成功

所以似乎只有第一个 WL.Logger.debug() 被成功调用,但 WL.Client.invokeProcedure() 似乎导致了Uncaught TypeError上面,它只是失败了(不调用成功案例回调,也不调用失败案例回调)。

这是一个 SQL Adapter 案例,但是当我尝试使用 HTTP Adapter 时,结果是一样的(在 WL.Client.invokeProcedure() 中失败)。同样,当我尝试“Run As .. -> Invoke Worklight Procedure”时,两者都会返回适当的结果。

我的控制台说这个失败发生在 worklight.js 的第 2380 行:

2379:isEnabled:功能(字段){

2380:返回!!(配置文件中的字段&&配置文件[字段]);

2381:}

所以我不知道我的代码会有什么问题。这个问题有什么想法/信息吗?感谢提前。

添加 了 Mac OSX 环境中也发生了相同的错误。

4

3 回答 3

2

我找到了导致我的问题的原因。

访问适配器时,我直接在 HTML 文件中编辑了我的 javascript,使用自动生成的 <script> 标签最底部的 <script> 标签,并尝试创建初始页面。我认为这不是 Worklight 的合适方式。我不确定到底出了什么问题,但我的 javascript 代码可以在一切准备就绪之前加载。

现在我改变了我的代码。我将以前位于 HTML 内部的 javascript 移动到 (Projectname).js 中 wlCommonInit() 函数的最底部。目前它似乎工作正常,没有像以前那样的错误消息,并通过适配器检索预期信息。这可能是一种合适的方式。

于 2013-03-06T00:03:37.147 回答
1

只应在调用 wlCommonInit 之后调用WL.Client.invokeProcedureWL.Logger.debug等 Worklight API 。

wlCommonInit驻留在应用程序的主 JavaScript 文件 (your-project\your-application\js\application-name.js) 中。

于 2013-03-05T06:35:47.600 回答
1

要解决此类问题,我们需要检查何时调用第一个适配器调用。我们需要将适配器调用延迟几秒钟,例如 1000 毫秒。然后您的应用程序将按照您的喜好运行。

setTimeout(function(){
$(document).ready(function() {

    var invocationData = {
            adapter : 'Contract', 
            procedure : 'GetDropDownListForLogin'
    };
    console.log("Invocation data:" +invocationData);
    var options = {
            onSuccess : OnLogindataSucess,
            onFailure : OnLoginFail,
            };

    WL.Client.invokeProcedure(invocationData,options);


});

},1000);

请使用以下方式为第一个适配器调用它将解决您的问题。

于 2014-04-08T09:39:37.987 回答