将参数传递给Adapter时出现问题

时间:2014-08-17 09:38:07

标签: javascript ibm-mobilefirst worklight-adapters

我有一个登录表单,它带有用户ID和密码。当用户点击提交按钮时 调用以下js函数。

function getGeoCode(){
    var para=[$('#usernameInputField').val()];
    alert("from sql adapter"+para);

    var id = {username : para };
    var invocationData = {
        adapter: "GDMSDbAdaptor",
        procedure: "getGeoCode",
        parameters: [id]
    };
    alert("before adapter proc call");

    WL.Client.invokeProcedure(invocationData, {
        onSuccess: getMessage,
        onFailure: getMessageOnfailure
    });
    alert("after adapter proc call");
}
适配器代码下面的

在上述函数

之后执行
var procedureStatement = WL.Server.createSQLStatement("SELECT DISP_NUMBER,DISP_STATUS,DISP_CREATE_DATE,CUST_CONT_NAME,DISP_RES_OWNER,DISP_MANAGER FROM GDMW.DISPUTE WHERE DISP_RES_OWNER IN (SELECT USER_CNUM FROM GDMW.USER_ACC_PROFILE WHERE USER_EMAIL=?)");

function getGeoCode(data) { 
    var email=data.username; 

    WL.Logger.info("In getGeoCode method"+email);
    return WL.Server.invokeSQLStatement({
        preparedStatement : procedureStatement,
        parameters : [email]
    });
}

运行上述代码时出现以下错误

  

[错误] FWLSE0099E:调用过程时发生错误   [project GDMSLoginApp] GDMSDbAdaptor / getGeoCodeFWLSE0100E:参数:   [project GDMSLoginApp] TypeError:找不到默认值   宾语。   (C%3A%5Cnewworkspaceworklight%5CGDMSLoginApp%5Cadapters%5CGDMSDbAdaptor / GDMSDbAdaptor-impl.js#22)   FWLSE0101E:引起:[项目   GDMSLoginApp] nullorg.mozilla.javascript.EcmaError:TypeError:不能   找到对象的默认值。   (C%3A%5Cnewworkspaceworklight%5CGDMSLoginApp%5Cadapters%5CGDMSDbAdaptor / GDMSDbAdaptor-impl.js#22)

但如果我对下面的参数进行硬编码(电子邮件ID),它可以正常工作:

function getGeoCode(){
    var para=[$('#usernameInputField').val()];
    alert("from sql adapter"+para);

    var id = {username : 'some@email.address' };
    var invocationData = {
        adapter: "GDMSDbAdaptor",
        procedure: "getGeoCode",
        parameters: [id]
    };

    alert("before adapter proc call");
    WL.Client.invokeProcedure(invocationData, {
        onSuccess: getMessage,
        onFailure: getMessageOnfailure
    });
    alert("after adapter proc call");
}

是否与单引号有关?

1 个答案:

答案 0 :(得分:1)

我的第一个猜测是,它正在发生,因为你正在使用括号:

var para=[$('#usernameInputField').val()];

当你不应该:

var para=$('#usernameInputField').val();

你也可以这样做:

var id = {username : $('#usernameInputField').val() };