0

我正在调用一个工作灯适配器并对外部服务进行安静的调用。WL.Client.invokeProcedure(invocationData,options)在调试区域执行工作灯方法时出现以下错误:

'null' 不是 'in' 的有效参数”

下面是我的适配器调用实现,不确定我在哪里犯了错误。

define(["dojo/_base/declare", "dojo/_base/lang", "dojo/_base/xhr",
     "dojo/_base/json", "dojo/_base/Deferred"], 
         function(declare,lang,xhr,json,Deferred) {

     return {
            mobGetLocationLatLng: function(pAddress) {          

                   console.log("+++adapter1.mobGetLocationLatLng+++pAddress" +
     pAddress );

         try{
            var invocationData = {
                    adapter : 'GeoCode',
                    procedure : 'getGmapLatLng',
                    parameters : [pAddress]
                    };

            console.log("+++about to invoke procedure+++"+ JSON.stringify(invocationData)); 
            WL.Client.invokeProcedure(invocationData,{
                onSuccess : this.gMapLatLngSuccess,
                onFailure : this.gMapLatLngFailure
            });
        }
        catch (e){
            console.log('Error...:' + e.message);
        }

    },
    gMapLatLngSuccess: function (result){
        console.log('Success:');
        console.log('<<<<<adapter1.result>>>>>>>>> ' + JSON.stringify(result.invocationResult));
        return result.invocationResult;
    },
    gMapLatLngFailure: function(){
        console.log('Failure');
    }
  };
});

任何人都可以帮忙吗?

4

1 回答 1

2

测试 1:证明适配器独立工作(无 JavaScript)

尝试右键单击 GeoCode 适配器文件夹 > 部署适配器 > 调用过程 > ...

它有效吗?你能得到你所期望的吗?

测试 2:证明适配器调用独立工作 (JavaScript)

尝试在您现有的 Worklight 项目(可以访问 GeoCode 适配器)下创建一个新的混合 Worklight 应用程序 (wlapp) > 打开wlapp.js> 将其中的所有代码替换为以下内容:

function wlCommonInit () {

    WL.Client.invokeProcedure({
        adapter : 'GeoCode',
        procedure : 'getGmapLatLng',
        parameters : ['hardcode_valid_value_here']
        },{
        onSuccess : function(res){ console.log('win', res); },
        onFailure : function(res){ console.log('fail', res); }
    });
}

注意: 'hardcode_valid_value_here'应替换为有效值。

尝试隔离问题,好像您只是从应用程序中复制/粘贴代码而没有尝试隔离错误。

它有效吗?你能得到你所期望的吗?

测试 3:证明 Worklight 脚本标签没有问题

如果您使用多个 HTML 页面,请查看此 StackOverflow 回复。如果您将所有内容都包含在一个 HTML 页面中,它会起作用吗?

测试 4:尝试调试器

打开 Google Chrome > 打开 WL 控制台 (localhost:8080/console) > 预览为公共资源 >向调用添加断点WL.Client.invokeProcedure> 确保代码被执行并在断点处停止 > 继续进入/遍历代码。分享导致问题的代码。

根据上述测试,使用更多信息更新您的问题。

编写代码的其他方式

function wlCommonInit () {

//Define your LocationSingleton under myNameSpace
var myNameSpace = myNameSpace || {};
myNameSpace.LocationSingleton = (function ($) {

        //Private Members:
        var _getLocationFromAdapter = function (pAddress) {

            var deferred = $.Deferred(),

                    invocationData = {
                        adapter : 'GeoCode',
                        procedure : 'getGmapLatLng',
                        parameters : [pAddress]
                    },

                    success = function (res) {
                        console.log('Worked:', res);
                        deferred.resolve(res);
                    },

                    failure = function (err) {
                        console.log('Failed:', err);
                        deferred.reject(err);
                    };

                    console.log('Calling getLocationFromAdapter with:', invocationData);
                    WL.Client.invokeProcedure(invocationData, {
                        onSuccess : success,
                        onFailure : failure
                    });

                    return deferred.promise();
        };

        //Public API:
        return {
            getLocationFromAdapter : _getLocationFromAdapter
        };

}(WLJQ));


        //Usage: Calling the function and getting the location or a failure
        myNameSpace.LocationSingleton.getLocationFromAdapter('hardcode_valid_value_here')

        .then(function (res) {
            console.log('Done:', res);
        })

        .fail(function (err) {
            console.log('Err:', err);
        });

}
于 2013-05-02T01:59:27.640 回答