2

IBM Worklight Developer Edition 5.0.5を使用して単純な(HTMLおよびアダプター)アプリケーションを作成しようとしていますが、未解決の問題に直面しています。

これは、古いフォーラムでは回答されていない同じ問題である可能性があります: http ://www.ibm.com/developerworks/forums/thread.jspa?threadID=460738

【環境】 OS:Windows7 64ビット(日本語ロケール)、Eclipse:4.2.1、Worklight:Developer Edition 5.0.5

[説明] jQuerymobileやDojoなどの外部ライブラリを使用せずに、EclipseでWorklightProjectを作成しました。このプロジェクトにHTTPアダプターとSQLアダプターを追加しました。'Run As ..-> Invoke Worklight Procedure'を試してみると、どちらも正常に機能しているようです。どちらも期待されるJSONを返しました。したがって、アダプタに問題はないと思います。

しかし、HTMLファイルからこれらのアダプターを呼び出すと、worklight.js(line:2380)で「UncaughtTypeError:Canotuse'in'演算子を使用して'SUPPORT_COOKIES'innullを検索できません」というエラーが発生しました。

[私のコード]

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:success:result =" + result); }

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

[私のデバッグコンソール出力]

1:invocationData =[オブジェクトオブジェクト]worklight.js:1112

Uncaught TypeError:nullworklight.js:2380で「SUPPORT_COOKIES」を検索するために「in」演算子を使用できません

wlclientinitがworklight.js:1112を開始しました

前:app init onSuccess worklight.js:1112

後:app init onSuccess worklight.js:1112

wlclientinitの成功

したがって、最初のWL.Logger.debug()のみが正常に呼び出されたように見えますが、WL.Client.invokeProcedure()は上記のUncaught TypeErrorを引き起こしているようで、失敗しただけです(success-caseコールバックもfailure-caseコールバックも呼び出さない)。

これはSQLアダプターの場合ですが、HTTPアダプターを使用しようとすると、結果は同じでした(WL.Client.invokeProcedure()で失敗しました)。繰り返しますが、「実行」を実行しようとすると、どちらも適切な結果を返します。

私のコンソールは、この失敗がworklight.jsの2380行目で発生すると言っています:

2379:isEnabled:function(field){

2380:return !!(プロファイル内のフィールド&&プロファイル[フィールド]);

2381:}

だから私は自分のコードで何が悪いのか分かりません。この問題に関するアイデア/情報はありますか?よろしくお願いします。

追加 同じエラーがMacOSX環境でも発生しました。

4

3 に答える 3

2

問題の原因を見つけました。

アダプタにアクセスするときに、自動生成された<script>タグの一番下にある<script>タグを使用して、HTMLファイル内のJavaScriptを直接編集し、最初のページを作成しようとしました。それはWorklightにとって適切な方法ではないと思います。何が間違っているのか正確にはわかりませんが、すべての準備が整う前にJavaScriptコードをロードできます。

今、私は自分のコードを変更しました。以前はHTML内にあったJavaScriptを、(Projectname).jsのwlCommonInit()関数の一番下に移動しました。現在、以前のようにエラーメッセージなしで正常に動作しているようで、アダプタを介して期待される情報を取得します。これは適切な方法かもしれません。

于 2013-03-06T00:03:37.147 に答える
1

WL.Client.invokeProcedureWL.Logger.debugなどのWorklightAPIの呼び出し は、wlCommonInitが呼び出された後にのみ実行する必要があります。

wlCommonInitは、アプリケーションのメインJavaScriptファイル(your-project \ your-application \ js \ application-name.js)にあります。

于 2013-03-05T06:35:47.600 に答える
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);

最初のアダプタを呼び出すには、次の方法を使用して問題を解決してください。

于 2014-04-08T09:39:37.987 に答える