Autor Zpráva
Medvídek
Profil
Narazil sem na problém s polem, kterej mi vrací JSON přes funkci JSON encode.
JSON se mi vrací v tomto tvaru:

{"status":200,"widget":{"759":{"name":"kancel\u00e1\u0159","id":759,"desc":"Posledn\u00ed kontrola: P\u0159ed 11 minutama<\/strong>","stav":1,"stavDesc":"Porucha!<\/strong> Nastala dnes v 12:19","sekce":{"A":{"nazev":"Sekce A","status":2},"B":{"nazev":"Sekce B","status":2}}},"837":{"name":"Bus na map\u011b","id":837,"desc":"Posledn\u00ed kontrola: P\u0159ed 36 minutama<\/strong>","stav":2,"stavDesc":"Porucha!<\/strong> Nastala dnes v 12:19","sekce":{"A":{"nazev":"Sekce A","status":2},"B":{"nazev":"Sekce B","status":1}}},"925":{"name":"OASiS","id":925,"desc":"Posledn\u00ed kontrola: P\u0159ed 36 minutama<\/strong>","stav":2,"stavDesc":"Porucha!<\/strong> Nastala dnes v 12:19","sekce":{"A":{"nazev":"Sekce A","status":1},"B":{"nazev":"Sekce B","status":1}}},"589":{"name":"J80","id":589,"desc":"Posledn\u00ed kontrola: P\u0159ed 53 minutama<\/strong>","stav":2,"stavDesc":"Porucha!<\/strong> Nastala dnes v 12:19","sekce":{"A":{"nazev":"Sekce A","status":2},"B":{"nazev":"Sekce B","status":1}}}}}


A pokud se zeptám na velikost pole přes:
alert(widgetReturn.widget.length);
//widgetReturn je zpracovani vysledku z ajaxu

tak mi to napíše undefined.

Ale pokud to normálně zpracuji:

$.each(widgetReturn.widget, function(key, value) {
             
          for(i=0;i<sections.length;i++){
           sections.splice(i);
          }
            
            var widgetKey = widgetReturn.widget[key]['id'];
            var widgetNazev = widgetReturn.widget[key]['name']; 
            var widgetDesc =  widgetReturn.widget[key]['desc'];
            
            if(widgetReturn.widget[key]['stav']==1){
             if($('#wid'+widgetKey+' div.error').length){ 
              $('#wid'+widgetKey+' div.error').remove();
             }
            }
            if(widgetReturn.widget[key]['stav']==2){
             if($('#wid'+widgetKey+' div.error').length){ 
              $('#wid'+widgetKey+' div.error').html(widgetReturn.widget[key]['stavDesc']);
             }
             else{
               var errorDiv = $('<div class="error">'+widgetReturn.widget[key]['stavDesc']+'</div>');
               $('#wid'+widgetKey).append(errorDiv);
             }
            }
            
            $('#wid'+widgetKey+' h3 a').text(widgetNazev);
            $('#wid'+widgetKey+' p').html(widgetDesc);
            
            //if(typeof(widgetReturn.widget[key]['sekce']) != "undefined"){
             $.each(widgetReturn.widget[key]['sekce'], function(k, v){
               if(widgetReturn.widget[key]['sekce'][k]['status']==1){var sectionStatus = 'ok';}
               if(widgetReturn.widget[key]['sekce'][k]['status']==2){var sectionStatus = 'error';}
               sections.push('<li class="'+sectionStatus+'">' + widgetReturn.widget[key]['sekce'][k]['nazev'] + '</li>');
             });
             $('#wid'+widgetKey+' ul').html(sections.join(''));
            //}
         });


Tak se vše provede správně.
Je tedy jiná možnost, jak hlídat jestli existuje pole widget, popřípadně kolik má v sobě prvků?
Kajman_
Profil *
Medvídek:
e tedy jiná možnost, jak hlídat jestli existuje pole widget, popřípadně kolik má v sobě prvků?

Vrácený widget není pole ale objekt.
__construct
Profil
Medvídek:
pokud se zeptám na velikost pole
Ale ten widgetReturn nie je pole, ale objekt.

Ty chceš počítať vlastnosti objektu. To sa dá celkom jednoducho takto:
function pocetVlastnosti(objekt) {
  var vysledok = 0;
  for(var vlastnost in objekt) {
    // kontrola či vlastnosť je objektu, alebo zdedená
    if (objekt.hasOwnProperty(vlastnost)) {
      vysledok++;
    }
  }
  return vysledok;
}

console.log(pocetVlastnosti(widgetReturn));
Medvídek
Profil
Kajman, __construct:
Díky, použil jsem toto:

Object.keys(widgetReturn.widget).length
Chamurappi
Profil
Reaguji na Medvídka:
Object.keys funguje jen v některých nových prohlížečích.
Medvídek
Profil
Chamurappi:
Aha, díky za upozornění, použiji tedy fci od __construct.
Radek9
Profil
Medvídek:
Možná by bylo lepší použít obě ty funkce. Ověřit, jestli funkce existuje, a pokud ne, tak ji dodefinovat.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0