Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przesyłanie danych do JS - w jaki sposób najlepiej?, split? xml? {zmienna:wartosc, zmienna2:wartosc2}?
Apocalyptiq
post 21.11.2008, 18:18:09
Post #1





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Chcąc co chwilę pobierać przez AJAX'a jakieś bardziej rozbudowane dane, trzeba je jakoś w JS przetworzyć. W jaki sposób najlepiej przesyłać JS'owi dane? Ja dotąd używałem takiego czegoś:
Kod
dana1|rekord1,rekord2,rekord3|info11*info21,info12*info22,info13*info23

No i tak wyciągałem dane:
Kod
var data=responeText.split("|");
   var dana=data[0];
   var rekordy=data[1].split(",");
   var infa=data[2].split(",");
   for each(var info in infa){
     var inf=info.split("*");
   }

Niby kod jest mało czytelny, ale całość kodu jest mała smile.gif Oczywiście uważam, aby w zmiennych nie wystąpiły znaki, którymi rozdzielam poszczególne dane.
Przeglądając inne strony (przy pomocy FireBuga->Konsola) widziałem czasami takie coś:
Kod
{costam:dana1,costam2:dana2}

Lecz bardziej rozbudowane, przykład z Betfair.com :
Kod
while(1) {};{"sysparams":{"version":"9.7.0-4"},"marketupdates":{"betDelay":5,"bspReconciled":false,"id":100007190,"profitAndLossForSettledBets":0.0,"status":"A","totalMoneyMatched":"USD 18,052"},"sportsParameters":{"form_YN":"N","liveScoreFeed_URL":"","form_URL":"","liveScoreDetail_URL":"","mvMicrosite_URL":""},"runnerprices":[{"bestBacks":[{"price":1.93,"size":10.0},{"price":1.92,"size":7.0},{"price":1.7,"size":18.0}],"bestLays":[{"price":0.0,"size":0.0},{"price":0.0,"size":0.0},{"price":0.0,"size":0.0}],"marketId":100007190,"runnerId":15315052},{"bestBacks":[{"price":1.51,"size":655.0},{"price":1.4,"size":83.0},{"price":1.38,"size":10.0}],"bestLays":[{"price":2.0,"size":25.0},{"price":0.0,"size":0.0},{"price":0.0,"size":0.0}],"marketId":100007190,"runnerId":15315053},{"bestBacks":[{"price":3.1,"size":14.0},{"price":3.0,"size":12.0},{"price":2.3,"size":68.0}],"bestLays":[{"price":10.0,"size":25.0},{"price":0.0,"size":0.0},{"price":0.0,"size":0.0}],"marketId":100007190,"runnerId":15315054}],"runners":[{"marketId":100007190,"name":"Denmark","runnerId":15315052,"selectionId":602688,"vacant":false},{"marketId":100007190,"name":"Russia","runnerId":15315053,"selectionId":602689,"vacant":false},{"marketId":100007190,"name":"Draw","runnerId":15315054,"selectionId":330157,"vacant":false}]}


Używał ktoś kiedyś tego sposobu? Jak z takiego czegoś można wygodnie wyciągnąć dane przez js? smile.gif

Nie znam się zbytnio na parsowaniu xml, ale tak sobie pomyślałem, że możnaby też przesyłać tego typu dane do JS za pomocą zapisu xml?

Proszę o Wasze opinie.

Ten post edytował Apocalyptiq 21.11.2008, 18:22:05


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post
woj_tas
post 21.11.2008, 20:39:47
Post #2





Grupa: Zarejestrowani
Postów: 230
Pomógł: 36
Dołączył: 31.03.2006
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


Polecam jquery + xml:
link


--------------------
Go to the top of the page
+Quote Post
Apocalyptiq
post 22.11.2008, 17:43:59
Post #3





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Dzięki wojtas za linka smile.gif

Właśnie po jego przeczytaniu próbuję napisać shoutboxa, ale coś mi nie działa... Sprawdzałem w firebug'u - odpowiedź requesta jest ok - poprawny xml. Tylko że nie wykonuje mi funkcji zawartej w success (jak w firebugu sprawdzałem, w ogóle 'nie wchodzi' w zawartość success), tak to teraz wygląda:
Kod
function reShout(){
    $.ajax({
        url:"/getShout",
        dataType:"xml",
        data:"nr="+$("#last").val(),
        success:function(data){
            $(data).find("mesg").each(function(){
                var item=$("<div>");
                item.addClass("item");
                item.addClass($(this).attr("class"));
                item.html("<strong>"+$(this).find("autor").text()+"</strong> <small>"+$(this).find("date").text()+"</small>");
                $("#shoutbox").appendChild(item);
            });
            $("#last").val($(this).find("mesg:last").attr("id"));
        }
    });
}
   $(document).ready(function(){
   $("form[@name='shoutForm']").submit(function(){
       $.post("/sendMesg",
       {mesg:this.mesg.value},
       function(){
           reShout();
       });
   });
   /*odpalenie pobrania aktualnych wiadomości i odpalenie setIntervala pobierającego co 3 sekundy nowe wiadomości*/
   reShout();
   window.setInterval("reShout()",3000);
   });

Wie ktoś co tu może być nie tak (chodzi o samą funkcję reShout)? smile.gif

Ten post edytował Apocalyptiq 22.11.2008, 18:00:13


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post
bregovic
post 22.11.2008, 18:30:10
Post #4





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

Ostrzeżenie: (0%)
-----


XML nie jest zły, ale czy to nie overkill w tym przypadku? JSON by nie wystarczył?


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
Apocalyptiq
post 23.11.2008, 18:41:31
Post #5





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Cytat(bregovic @ 22.11.2008, 18:30:10 ) *
XML nie jest zły, ale czy to nie overkill w tym przypadku? JSON by nie wystarczył?


Dzięki bregovic! Zmieniłem z XML na JSON i zaczęło działać!
Tak teraz wygląda ten skrypt shoutboxa:
Kod
function reShout(){
     $.getJSON(
         "/",
         {page:"getShout",nr:$("#last").val()},
         function(mesgs){
         $.each(mesgs.mesg,function(n,item){
             var newMesg=$("<div>");
             newMesg.addClass("item");
             newMesg.addClass(item.class);
             newMesg.html("<strong>"+item.autor+"</strong> <small>"+item.date+"</small><br/>"+item.text);
             $("#shoutbox").append(newMesg);
         });
         $("#last").val(mesgs.lastNr);
         }
     );
     setTimeout("reShout();",3000);
}
$(document).ready(function(){
$("form[@name='shoutForm']").submit(function(){
     $.post("/sendMesg",
     {mesg:this.mesg.value},
     function(){
         reShout();
     });
     this.mesg.value="";
     return false;
});
reShout();
});

Zamiast odpalać interwał, wrzuciłem na koniec funkcji reShout (sprawdzanie czy nie ma nowych wiadomości) wywołanie tejże funkcji w setTimeoucie, a jak tylko DOM się załaduje - odpalam reShout() smile.gif

Jednak głupi pomysł z tym setTimeout - reShout() odpalałem też jak się wyśle jakąś wiadomość, a wtedy po wysłaniu wiadomości tworzył się dodatkowy setTimeout smile.gif Jednak lepszy jest setInterval winksmiley.jpg Poprawiony skrypt:
Kod
function reShout(){
    $.getJSON(
        "/",
        {page:"getShout",nr:$("#last").val()},
        function(mesgs){
        $.each(mesgs.mesg,function(n,item){
            if($("#mesg"+item.nr).length==0){
                var newMesg=$("<div>");
                newMesg.attr("id","mesg"+item.nr);
                newMesg.addClass("item");
                newMesg.addClass(item.class);
                newMesg.html("<strong>"+item.autor+"</strong> <small>"+item.date+"</small><br/>"+item.text);
                $("#shoutbox").append(newMesg);
            }
        });
        $("#last").val(mesgs.lastNr);
        $("#shoutbox").attr("scrollTop",$("#shoutbox").attr("scrollHeight")-$("#shoutbox").attr("offsetHeight"));
        }
    );
}
$(document).ready(function(){
$("form[@name='shoutForm']").submit(function(event){
    $.post("/sendMesg",
    {mesg:this.mesg.value},
    function(){
        reShout();
    });
    this.mesg.value="";
    event.preventDefault();
    return false;
});
reShout();
window.setInterval("reShout()",3000);
});
Normalnie odpalony aby władowało wiadomości na starcie, a setInterval - co każde 3 sekundy.

Ten post edytował Apocalyptiq 23.11.2008, 12:24:06


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 13:41