未捕获的TypeError:无法使用“in”运算符在null中搜索“SUPPORT_COOKIES”

时间:2013-03-05 02:25:15

标签: ibm-mobilefirst

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

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

[环境] 操作系统:Windows7 64位(日语语言环境), Eclipse:4.2.1, Worklight:Developer Edition 5.0.5

[说明] 我在Eclipse中创建了Worklight项目,没有任何外部库,如jQuery mobile和Dojo。我在此项目中添加了HTTP适配器和SQL适配器。当我尝试'Run As .. - >时,两者似乎都运行正常。调用Worklight Procedure'。两者都返回了预期的JSON。所以我认为适配器不会出现问题。

但是当我从HTML文件中调用这些适配器时,我得到了“未捕获的TypeError:无法使用'in'运算符来搜索worklight.js中的'SUPPORT_COOKIES'错误(行:2380) )。

[我的代码]

  

var invocationData = {adapter:'SQLAdapter',procedure:   'getCount',参数:[]};

     

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

     

WL.Logger.debug(“2:loadFeeds”);

     

function loadFeedsSuccess(result){WL.Logger.debug(“3:成功:   result =“+ result);}

     

function loadFeedsFailure(result){WL.Logger.debug(“4:失败:   result =“+ result);}

[我的调试控制台输出]

  

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

     

未捕获的TypeError:无法使用'in'运算符进行搜索   “SUPPORT_COOKIES”在null worklight.js:2380

     

wlclient init启动了worklight.js:1112

     

之前:app init onSuccess worklight.js:1112

     

之后:app init onSuccess worklight.js:1112

     

wlclient init success

所以似乎只有第一个WL.Logger.debug()成功调用,但WL.Client.invokeProcedure()似乎导致上面的未捕获的TypeError ,它只是失败了(没有调用成功 - 大小写回调,也没有故障情况回调)。

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

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

  

2379:isEnabled:function(field){

     

2380:return !!(简介中的字段&& profile [field]);

     

2381:}

所以我不知道我的代码会出现什么问题。这个问题有什么想法/信息吗?谢谢你的进步。

在Mac OSX环境中也发生了同样的错误。

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

调用Worklight API WL.Client.invokeProcedure WL.Logger.debug 只有在调用wlCommonInit后才会发生。

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

答案 2 :(得分:1)

要解决此类问题,我们需要检查何时调用第一个适配器调用。我们需要延迟适配器调用一段时间,如1000ms。然后您的应用程序将按您喜欢的方式运行。

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);

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