Avatar billede AnyFellow Mester
21. maj 2012 - 20:24 Der er 12 kommentarer og
1 løsning

Loop gennem array med jquery

Jeg har dette array:
{"action":"show_basket","data":{"0":{"pcs":"1","text":"produkt1","price":"160.00","currency":"DKK"},"1":{"pcs":"3","text":"produkt2","price":"7.50","currency":"DKK"},"total":{"price":"182.50","currency":"DKK"}}}


Hvordan looper jeg gennem arrayet og fanger totalen til sidst?

Jeg har været lidt i gang med at kigge på det, men kan ikke finde de vise sten.


var shoppingbasket_callback = function(result) {
    if (typeof result.action !== 'undefined' && typeof result.data !== 'undefined') {
        if (result.action === 'show_basket') {
            $.each(result.data, function() {
                $.each(this, function(k, v) {
                    $("#shoppingbasket").append(v)
                });
            });
        }
    }
}
Avatar billede jakobdo Ekspert
21. maj 2012 - 22:50 #1
Det ligner json.
Kan du ikke "bare" parse det og så hente total via:

data.total
Avatar billede AnyFellow Mester
22. maj 2012 - 08:00 #2
Det er korrekt at det er json.

Jeg var måske ikke helt skarp, men jeg skal også bruge de andre oplysninger.

Jeg er usikker på hvordan jeg looper gennem data og jeg er usikker på hvordan jeg "opdager" når jeg er nået til "total".
Avatar billede jakobdo Ekspert
22. maj 2012 - 08:12 #3
Hvordan får du "disse" data?
Loader du dem via en POST eller GET ?
Avatar billede AnyFellow Mester
22. maj 2012 - 09:41 #4
Det må være via en GET.

Brugeren klikket på et link (HREF). Klik på linket fanges af jquery, der anvender variabler i linket. Disse variabler anvendes og et json-array returneres.
Avatar billede jakobdo Ekspert
22. maj 2012 - 10:52 #5
Test lige noget ala dette:

$.GET("LINK.TIL.JSON",function(json){
  alert(data.total);
},"json");
Avatar billede AnyFellow Mester
22. maj 2012 - 19:36 #6
Det er ikke at få mine data hentet der er problemet.

De er allerede i "result". Det er bearbejdningen af dem jeg har problemer med.
Avatar billede keysersoze Guru
22. maj 2012 - 19:44 #7
hvor langt når din nuværende kode?
Avatar billede AnyFellow Mester
22. maj 2012 - 19:47 #8
Jeg får hentet json-arrayet, men når jeg forsøger at loope med koden fra mit første indlæg, viser den [object].

Umiddelbart må det være fordi jeg ikke "looper" dybt nok i arrayet, men ideelt set skulle der nok laves noget rekursivt, hvilket ligger uden for min rækkevidde rent kodemæssigt.
Avatar billede tjens Nybegynder
22. maj 2012 - 21:42 #9
<!DOCTYPE html>
<html lang="en-GB">
<head>
<title>Jquery each items</title>
</head>
<body>
<pre id="shoppingbasket">
</pre>
<script  src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
    var result = {   
        "action":"show_basket",
        "data":{
                "0":    {"pcs":"1","text":"produkt1","price":"160.00","currency":"DKK"},
                "1":    {"pcs":"3","text":"produkt2","price":"7.50","currency":"DKK"},
                "total":{"price":"182.50","currency":"DKK"}
        }
    };
    if (result.action === 'show_basket') {
        $.each(result.data, function(k, v) {
            var p = document.createElement("p");
            if ( k === "total") {
                p.appendChild( document.createTextNode('Total:\t\t\t' + v.price + " " + v.currency));
            } else {
                p.appendChild( document.createTextNode(v.text + '\t' +v.pcs + ' stk.\t' + v.price + " " + v.currency));
            }
            $("#shoppingbasket").append(p);
        });
    }
</script>
</body>
</html>
Avatar billede keysersoze Guru
22. maj 2012 - 21:52 #10
Jeg ved selvfølgelig ikke præcis hvad du gerne vil udskrive, men din første foreach bør i grunden være nok for det er her du looper igennem dine "data"-objekter og så vil du kunne tilgå objektets egenskaber med fx this.egenskab.

Det kan selvfølgelig være en grund til at du har organiseret din JSON som du har, men jeg ville umiddelbart forsøge at få lavet et lidt pænere udtræk - fx;

{"action": "show_basket",
"data": [
{"pcs":"1","text":"produkt1","price":"160.00","currency":"DKK"}",
{"pcs":"3","text":"produkt2","price":"7.50","currency":"DKK"}],
"total": {"price":"182.50","currency":"DKK"}}

på den måde blandet du ikke æbler og bananer som du reelt gør nu i din "data" - du har derimod en action, en total og en dataliste.
Avatar billede AnyFellow Mester
23. maj 2012 - 08:29 #11
tjens...> Jeg kigger på din løsning når jeg er i nærheden af en min computer igen.

keysersoze...> Kan godt se at dit forslag til organisering er mere logisk. Jeg tilretter mit array.
Avatar billede AnyFellow Mester
23. maj 2012 - 18:11 #12
tjens...> Det var lige noget i den stil jeg var på udkig efter. Læg et svar og der er point på vej.
Avatar billede tjens Nybegynder
24. maj 2012 - 21:48 #13
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester