Вызов адаптера Worklight и отображение данных JSON в виде списка в виде строк

Это мой код adapter.impl.js.

 //This procedure implementation is to get all the details from the table which in database.
 var procedure1Statement = WL.Server.createSQLStatement("select * from employee");
 function procedure1() {
return WL.Server.invokeSQLStatement({
    preparedStatement : procedure1Statement,
    parameters : []
});
}

Это мои данные JSON, полученные из адаптера SQL в рабочем свете.

{
"isSuccessful": true,
"resultSet": [
  {
     "EMAIL": "[email protected]",
     "ID": 1,
     "NAME": "Bhanu Kandregula"
  },
  {
     "EMAIL": "[email protected]",
     "ID": 2,
     "NAME": "Raghu Kandregula"
  },
  {
     "EMAIL": "[email protected]",
     "ID": 3,
     "NAME": "Shyam Surisetty"
  },
  {
     "EMAIL": "[email protected]",
     "ID": 4,
     "NAME": "Bunny"
  },
  {
     "EMAIL": "[email protected]",
     "ID": 5,
     "NAME": "Divya Sri"
  },
  {
     "EMAIL": "[email protected]",
     "ID": 6,
     "NAME": "Chandana"
  }
]
}

Я не должен был вызывать этот адаптер со стороны клиента и отображать эти данные в виде списка на моей мобильной консоли. Для этого это код, который я использовал в js-файле на стороне клиента.

function wlCommonInit(){
LoadSQLRecords();}

function loadSQLRecords(){
var invocationData = {
    adapter : 'MySQLadap',
    procedure : 'procedure1',
    parameters : []
};

WL.Client.invokeProcedure(invocationData,{
    onSuccess : loadSQLQuerySuccess,
    onFailure : loadSQLQueryFailure
});
}

function loadSQLQuerySuccess(result) {
    WL.Logger.debug("Retrieve success" +  JSON.stringify(result));
    displayFeeds(result.invocationResult.resultSet);
}

function loadSQLQueryFailure(result) {
    WL.Logger.error("Retrieve failure");
}

function displayFeeds(items) {
    var ul = $('#itemsList');
    for (var i = 0; i < items.length; i++) {
        var li = $('<li/>').html(items[i].id);
        li.append($('<li/>').html(items[i].name));
        li.append($('<li/>').html(items[i].email));
        li.append($('<hr>'));
        ul.append(li);
    }
  }

И это мой код файла HTML для отображения моих данных на экране.

<div id="wrapper">
        <ul id="itemsList"></ul>
 </div>

Но это не работает со мной. Я искал много блогов и сайтов, но я не смог вызвать это. Пожалуйста, помогите мне вызвать адаптер и отобразить эти данные в виде списка на мобильной консоли. Спасибо.


person Bhanu Prakash    schedule 09.01.2015    source источник
comment
Откройте инструменты разработчика Chrome и проверьте в его консоли, какую ошибку вы получаете... обязательно обновите страницу, когда консоль открыта.   -  person Idan Adar    schedule 09.01.2015
comment
Готово @IdanAdar, но не удалось получить вывод. Код кажется хорошим, но не знаю, где я ошибся.   -  person Bhanu Prakash    schedule 09.01.2015
comment
Что ты имеешь в виду? Что вы видите в консоли? Какую ошибку вы получаете? что ты видишь на экране?   -  person Idan Adar    schedule 09.01.2015
comment
Добавьте к вопросу свой код adapter-impl.js.   -  person Idan Adar    schedule 09.01.2015
comment
Я сделал @IdanAdar, пожалуйста, взгляните на мой код адаптера. Спасибо.   -  person Bhanu Prakash    schedule 09.01.2015
comment
Конечно, @IdanAdar, я первокурсник, чтобы начать переполнение. Я выучу.   -  person Bhanu Prakash    schedule 09.01.2015


Ответы (1)


Вам необходимо исправить приведенное ниже, а затем повторно развернуть приложение.

  1. Вы неправильно написали имя функции:

    LoadSQLRecords должно быть loadSQLRecords.

    function wlCommonInit(){
        LoadSQLRecords(); // Upper-case 'L'; should be lower-case.
    }
    
    function loadSQLRecords(){
        var invocationData = {
            adapter : 'MySQLadap',
            procedure : 'procedure1',
            parameters : []
        };
    };
    

    Вы должны были увидеть следующее в консоли Chrome DevTools до исправления:

    worklight.js:5147 Uncaught Exception: Uncaught ReferenceError: LoadSQLRecords is not defined at (compiled_code):4
    main.js:4 Uncaught ReferenceError: LoadSQLRecords is not defined
    
  2. Вам нужно изменить следующее, чтобы фактически отображать какие-либо значения.

    • use items.invocationResult.resultSet
    • используйте правильную заглавную букву для свойств

    От:

    for (var i = 0; i < items.length; i++) {
        var li = $('<li/>').html(items[i].id);
        li.append($('<li/>').html(items[i].name));
        li.append($('<li/>').html(items[i].email));
        li.append($('<hr>'));
        ul.append(li);
    }
    

    To:

    for (var i = 0; i < items.invocationResult.resultSet.length; i++) {
        var li = $('<li/>').html(items.invocationResult.resultSet[i].ID);
        li.append($('<li/>').html(items.invocationResult.resultSet[i].NAME));
        li.append($('<li/>').html(items.invocationResult.resultSet[i].EMAIL));
        li.append($('<hr>'));
        ul.append(li);
    }
    
person Idan Adar    schedule 09.01.2015
comment
Готово. Это работает @Idan Adar. Спасибо за поддержку. - person Bhanu Prakash; 09.01.2015
comment
@BhanuPrakash, приятно слышать. Пожалуйста, отметьте как ответ. - person Idan Adar; 09.01.2015
comment
Готово. Спасибо @Idan Adar - person Bhanu Prakash; 09.01.2015