Поиск по этому блогу

пятница, 6 июля 2012 г.

Получение данных с сервера PhoneGap


Чуть раньше я писал как залогиниться на сервере с помощью PhoneGap и JQuery Mobile, но наше приложение будет бесполезным, если мы не смогли получить данные с удаленного сервера не так ли? Для этого нам нужно прежде всего что бы сервер мог генерировать JSON строку, давайте будем думать что он может это делать, если хотите узнать побольше то прошу в википедию, там доступно и ясно написано как это сделать. 

А мы же будем получать данные из строчного json. Он будет иметь вид:

var response_obj = {
    "response": "ok",
    "common": {
        "comment": "",
        "version": "0.01",
        "api_key": "ABM6WU0BAAAANfFuIQIAV1pUEYIBeogyUNvVbhNaJPWeM-AAAAAAAAAAAACRXgDsaYNpZWpBczn4Lq6QmkwK6g=="
    },
    "tasks": [{
        "name": "Conf synh",
        "url": "https://91.228.199.95/ksiywFac63f2hs/conf/",
        "time": "small",
        "output": "/home/user/lol/conf/",
        "user": "testuser1",
        "pass": "67890",
        "items": [{
            "course": "server2client",
            "distname": "telefon.lol.txt",
            "locname": "telefon.txt",
            "date": "2012-06-01-13-33",
            "size": "142"},
        {
            "course": "server2client",
            "distname": "ru.android.loc",
            "locname": "/home/user/lol/loc/ru.loc",
            "date": "2012-06-01-13-35",
            "size": "53"}]},
    {
        "name": "Photo synhronize",
        "url": "https://91.228.199.95/ksiywFac63f2hs/fotos.lol/",
        "time": "big",
        "output": "/home/user/lol/fotos/",
        "user": "testuser1",
        "pass": "67890",
        "items": [{
            "course": "server2client",
            "distname": "Picture_1.jpg",
            "locname": "foto1.jpg",
            "date": "2012-01-20-17-47",
            "size": "91857"},
        {
            "course": "server2client",
            "distname": "Picture_2.jpg",
            "locname": "foto2.jpg",
            "date": "2012-01-20-17-47",
            "size": "31459"},
        {
            "course": "server2client",
            "distname": "Picture_3.jpg",
            "locname": "foto3.jpg",
            "date": "2012-01-20-17-47",
            "size": "34490"},
        {
            "course": "server2client",
            "distname": "Picture_4.jpg",
            "locname": "foto4.jpg",
            "date": "2012-01-20-17-47",
            "size": "40951"}]},
    {
        "name": "Lol",
        "url": "https://91.228.199.95/ksiywFac63f2hs/",
        "time": "big",
        "output": "/home/user/lol/",
        "user": "testuser1",
        "pass": "67890",
        "items": [{
            "course": "client2server",
            "distname": "userfotos.php",
            "locname": "moifotos"}]}]
}


Дальше если помните у нас была вот такая штука в предыдущей статье:
if(data != "") {
               alert(data); //вот это
           } else {
              alert("Could not connect to server");
       }


data — это то что нам отправляет сервер в виде данных, ну или в нашем случае json строку которую нам нужно распарсить, для этого мы будем использовать конструкцию response_obj

Для того что бы вывести то что нам прислал сервер нам нужно написать следующий код вместо «alert(data);»:
$.each(response_obj.tasks, function(task_idx, task) { //заходим в объект tasks
    var $taskli = $("<li>"+task.name+"</li>").appendTo($("#tasks")); //записываем его в список, все таски будут отображаться в виде списка
    var $taskul = $("<ol/>").appendTo($taskli);
    $.each(task.items, function(item_idx, itm) {//заходим в список items
        $("<li>"+itm.locname+"</li>").appendTo($taskul);//выводим их в подсписок
    });
});​


Теперь у нас принятый список имеет вид:
Все мы получили нужные нам данные, теперь мы можем делать с ними что угодно, засунуть в красивый listView или дальше работать с ними. 


Спасибо за внимание. Буду вопросы, задавайте, буду рад помочь.