我有一个登录表单,其中包含用户名和密码。当用户点击提交按钮时,
下面的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]
    });
}


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


  [ERROR] FWLSE0099E:调用过程时发生错误
  [项目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 : '[email protected]' };
    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 para=[$('#usernameInputField').val()];


什么时候不应该:

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


您可能也可以这样做:

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

关于javascript - 向适配器传递参数时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25348005/

10-09 12:40