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

Posted

技术标签:

【中文标题】未捕获的类型错误:无法使用“in”运算符在 null 中搜索“SUPPORT_COOKIES”【英文标题】:Uncaught TypeError: Cannot use 'in' operator to search for 'SUPPORT_COOKIES' in null 【发布时间】:2013-03-05 02:25:15 【问题描述】:

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

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

[环境] 操作系统:Windows7 64bit(日语语言环境), 日食:4.2.1, Worklight:开发者版 5.0.5

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

但是当我从 HTML 文件中调用这些适配器时,我在 worklight.js(line:2380) 中出现 “Uncaught TypeError: Cannot use 'in' operator to search 'SUPPORT_COOKIES' in null” )。

[我的代码]

var invocationData = 适配器:'SQLAdapter',过程: '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: 成功: 结果 = " + 结果);

function loadFeedsFailure(result) WL.Logger.debug("4: 失败: 结果 = " + 结果);

[我的调试控制台输出]

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

未捕获的类型错误:无法使用“in”运算符搜索 空 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: return !!(profile 中的字段 && profile[field]);

2381:

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

已添加 Mac OSX 环境也出现同样的错误。

【问题讨论】:

我找到了解决方案。请在下面查看我自己的答案。谢谢。 【参考方案1】:

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

访问适配器时,我直接在 HTML 文件中编辑了我的 javascript,使用自动生成的

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

【讨论】:

【参考方案2】:

对 Worklight API 的调用,例如 WL.Client.invokeProcedureWL.Logger.debug 应该只在调用 wlCommonInit 之后发生。

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

【讨论】:

感谢伊沙伊。但我仔细检查了那行 已经(自动)插入到我的 HTML 中。正如您在 [我的调试控制台输出] 的第一行中看到的那样,WL.Logger.debug() 本身似乎可以工作。 我找到了解决方案!你的建议是一个很大的暗示,Ishai。我很感激。我会尽快发布我的答案。【参考方案3】:

要解决此类问题,我们需要检查何时调用第一个适配器调用。我们需要将适配器调用延迟几秒钟,例如 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);

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

【讨论】:

以上是关于未捕获的类型错误:无法使用“in”运算符在 null 中搜索“SUPPORT_COOKIES”的主要内容,如果未能解决你的问题,请参考以下文章

Jquery - 未捕获的类型错误:无法使用“in”运算符在中搜索“324”

未捕获的类型错误:无法使用“in”运算符在未定义的 vue 路由器中搜索“路径”

未捕获的类型错误:无法使用“in”运算符在 JSON 字符串中搜索“”

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

我得到一个未被捕获的类型错误,在尝试获取div时无法读取未定义的属性长度

数据表:未捕获的类型错误:无法读取未定义的属性“长度”