пятница, 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 или дальше работать с ними. 


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

5 комментариев:

  1. а на серверной стороне что писали?
    там порты прослушиваются? или на php просто отдается response_obj ?

    ОтветитьУдалить
    Ответы
    1. На серверной стороне генерируется json строка которую я получаю при обращении ну и обрабатываю

      Удалить
  2. а не подскажешь, как таймер с обратным отсчетам делать - на стороне сервера?
    При подкл клиента - запомнить время сервера (T) (клиентом и сервером), и при истечении его подключаться опять клиентом к серверу?! или подключаться чаще, но сервер должен через определенное время от (T) только отдавать новую информацию?!

    смысл в том,что 2 клиента подключаются и по-очереди принимают данные с сервера (игра с переходом хода) - только интересно с задержками интернета на клиентах - не будет расхождений... ?! :)

    спасибо

    ОтветитьУдалить
    Ответы
    1. Не подскажу так как я серверные скрипты не писал, для этого у меня есть php разработчик который пишет всю серверную часть)

      Удалить
    2. обидно) но все-равно спасибо)))
      ддем примеров написания серверной части от коллеги))))))

      Удалить