Получение ответа от HTTP-адаптера от Worklight

Я новичок в рабочем свете. Я попытался получить ответ json от http-адаптера, но не могу отобразить его на устройстве. Я добавил несколько предупреждений в свой код javascript и обнаружил, что он возвращает размер объекта json как «неопределенный».

Вот мой файл javascript адаптера:

function getGooglePlaces(location,name) {

    var input = {
        method : 'get',
        returnedContentType : 'json',
        path : 'maps/api/place/search/json',
        headers: {
            Host: 'maps.googleapis.com'
        },
        parameters : {
            'key'       :   MyKey,
            'location'  :  location,
            'radius'    :   '10000',
            'sensor'    :   'false',
            'name'      :  name 
        }
    };

    var response = WL.Server.invokeHttp(input);

    return response;

}

function addGooglePlace(param1) {

    var input = {
        method : 'put',
        returnedContentType : 'json',
        path : 'userInputRequired'
    };

    return WL.Server.invokeHttp(input);
}

Мой файл main.js:

function getLocation()
{

    if (navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(loadHTTPRecords);
    }
    else{x.innerHTML="Geolocation is not supported by this browser.";}
}

function loadHTTPRecords(position){

    var invocationData = {
        adapter : 'GooglePlaces',
        procedure : 'getGooglePlaces',
        parameters : [position.coords.latitude+','+position.coords.longitude,'dead battery']
    };

    WL.Client.invokeProcedure(invocationData,{
        onSuccess : loadHTTPQuerySuccess,
        onFailure : loadHTTPQueryFailure
    });

}

function loadHTTPQuerySuccess(result){

    WL.Logger.debug("Retrieve success" +  JSON.stringify(result));
    displayFeeds(result);

}

function loadHTTPQueryFailure(result){

    WL.Logger.error("Retrieve failure");
}

function displayFeeds(items){
    alert("In displayFeeds");

    // Get the size of an object

    var ul = $('#itemsList');
    alert("before for loop");

    alert(items.size);
    for (var i = 0; i < items.size; i++) {
        alert("inside for loop 1");
        for(var j=0;j<i;j++){
            alert("in for loop 2");
            var li = $('<li/>').html(items[i].name);

            li.append($('<hr>'));
            ul.append(li);
        }
    }
}

Пожалуйста, предложите, что я делаю неправильно.

мой образец ответа json

{
 "html_attributions": [
 ],
  "isSuccessful": true,
  "responseHeaders": {
   "Alternate-Protocol": "443:quic",
   "Cache-Control": "public, max-age=300",
   "Content-Type": "application\/json; charset=UTF-8",
   "Date": "Tue, 11 Feb 2014 12:04:13 GMT",
   "Expires": "Tue, 11 Feb 2014 12:09:13 GMT",
   "Server": "mafe",
   "Transfer-Encoding": "chunked",
   "Vary": "Accept-Language",
   "X-Frame-Options": "SAMEORIGIN",
    "X-XSS-Protection": "1; mode=block"
 },
   "responseTime": 236,
  "results": [
      {
       "geometry": {
        "location": {
           "lat": 52.057049,
           "lng": 1.153298
        }
     },
     "icon": "http:\/\/maps.gstatic.com\/mapfiles\/place_api\/icons\/cafe-71.png",
     "id": "ec0955fb06fd95d639c89d12475624627250abac",
     "name": "Costa Coffee",
     "opening_hours": {
        "open_now": true
     },
     "price_level": 2,
     "rating": 3.9,
     "reference": "CnRuAAAABmdY6kIxRQZw68hqjZ_wwBE29sdSgYuOkXf2IvZTe77aG-AgoCaahu1c9cddHA0Z1D2EdELAEuDyl38xV1G5YcvP3pOm2p0IwVkuvYIJSA1IKAGLIQym21SpXvhUSqBxrpHKBvgTNnUg69lHROaMyxIQvvP8SeCG_dzKi_JgrdrgRRoUQXqH4UkDtA-58bCbdRzUCdXTRVU",
     "types": [
        "cafe",
        "food",
        "establishment"
     ],
     "vicinity": "1-5 Queen St, Ipswich"
  },

person ravi    schedule 10.02.2014    source источник
comment
получаете ли вы ответ при вызове процедуры адаптера с помощью Вызов процедуры Worklight   -  person Kawinesh SK    schedule 11.02.2014
comment
Да, я получил ответ, когда я вызываю процедуру, но проблема в том, что когда я пытаюсь получить доступ к результатам массива, он говорит «не определено»   -  person ravi    schedule 11.02.2014
comment
Можете ли вы предоставить образец результата в своем вопросе, потому что я думаю, что вы неправильно проходите json.   -  person Kawinesh SK    schedule 11.02.2014


Ответы (1)


Если я правильно понял ваш вопрос, через items.size вы пытаетесь получить длину результатов. Если вы хотите получить длину результатов, вы должны использовать items.invocationResult.results.length, который даст вам общее количество результатов, где элементы - это ответ, исходящий от адаптера, а invocationResult содержит результаты и другие параметры, из которых вам нужно будет получить доступ к результатам. для доступа только к конкретному выходу.

Если я не понял ваш вопрос должным образом, пожалуйста, скажите мне, что именно вы пытаетесь получить через items.size

person sasi    schedule 11.02.2014
comment
у меня есть вопрос, должен ли я использовать JSON.stringify для преобразования объекта json в строку, а затем использовать items.invocationResult.results - person ravi; 11.02.2014
comment
Да, вы можете использовать. Оба дадут вам один и тот же результат, но если вы хотите получить доступ к длине результата, вы можете напрямую использовать item.invocationResult.results. - person sasi; 11.02.2014
comment
Спасибо, саси, я понял и еще одно сомнение. В том же ответе я хочу получить доступ к цене_уровня каждого результата, но когда я запускаю его, он говорит, что он не определен. - person ravi; 11.02.2014
comment
Если вы заметили свой ответ, результаты представлены в формате массива, поэтому, если вы хотите получить доступ к цене_уровня, вы должны указать, к какому индексу массива вы обращаетесь, например, для этого вывода вы можете получить доступ, например, items.invocationResult.results[ 0].price_level - person sasi; 11.02.2014
comment
я попробовал это и написал console.log, чтобы увидеть, что он печатает, я получил «неопределенный» для price_level - person ravi; 11.02.2014