Autor Zpráva
lukame
Profil *
Zdravím,
prosím, potřebuji pomoct se syntaxí. Mám zdroj dat pro autocomplete, kde proměnné beru z php:
 var src = [{
  
    "label": "<?php echo($e[1]); ?>",
    "value": "val1",
    "spz": "spz"
},
           { "label": "<?php echo($e[2]); ?>", 
    "value": "val12",
    "spz": "spz2"
},
           {          "label": "<?php echo($e[3]); ?>", 
    "value": "val31",
    "spz": "spz3"
},
           {          "label": "<?php echo($e[4]); ?>", 
    "value": "val31",
    "spz": "spz3"
},
           {          "label": "<?php echo($e[5]); ?>", 
    "value": "val31",
    "spz": "spz3"
},

];

Potřeboval bych src naplnit pomocí cyklu. Něco jako:
var src = [ 

  for (i=1; i <= 5; i++) {
           {          "label": "<?php echo($e[i]); ?>", 
                        "value": "val31",
                        "spz": "spz3"
           },
                                     {
];

Díky za radu.
Kcko
Profil
to se takhle nedělá. Strukturu si vytvoř jako zanořené pole a do JS objektu, který takhle ošklivě a hloupě plníš převedeš pomocí json_encode
lukame
Profil *
Díky, ale fakt nevím, o čem mluvíš :-). Možná kdybych věděl, tak se ani tak blbě neptám. řeším jen jednu jednoduchou, dílčí věc a nechce se mi do toho moc zabředávat. Je nějaké řešení, jak to podle mého ošklivě a hloupě naplnit? Nebo pisneš mi kód podle tvého? Díky
Kcko
Profil
<?php
$src = array(

    array("label" => "AAA", "value" => "BBB", "spz" => "CCC"),
    array("label" => "XXX", "value" => "ZZZ", "spz" => "YYY"),

);

print_r(json_encode($src));


Ten cyklus, resp naplnění pole v PHPku jak potřebuješ už zvládneš ne?
lukame
Profil *
Jo, to zvládnu. Vyzkouším.
lukame
Profil *
Hm... tak se mi to nepodařilo. Jak mám to vnořené pole vytvořit cyklem? Pořád se mi nedaří poskládat správně tu syntaxi.
Alphard
Profil
Tohle vlákno později zřejmě přesunu do PHP, ten cyklus musí být napsaný v něm, ten návrh v [#1] lukame nemůže fungovat ani přibližně.

$data = []; // definice nového prázdného pole
for ($i = 1; $i <= 5; $i++) { // váš cyklus, ale v PHP
  $data[] = [ // přidání nového zanořeného pole na konec pole $data
    'label' => $e[$i],
    'value' => 'val'.$i,
    'spz' => 'spz',
  ];
}

echo json_encode($data); // vyexportování připravené datové struktury do JSON, který lze snadno použít v javascriptu

Opraven překlep, chyběl $ v názvu proměnné.
lukame
Profil *
Díky, ale nechápu, co mi to dělá. Např. do label: se mi nedaří načíst proměnnou z pole. KOnkrétně tedy 'label' => $e[i], nefunguje vůbec. K "i" jsem přidal $: 'label' => $e[$ii], , také to nefunguje. Přitom, když zadám přímo třeba 2, tak mi to druhý prvek pole normálně do label zapíše. Nechápu to.
Alphard
Profil
Má tam být $i, to byl překlep. Dám sem ještě verzi doplněnou o zdrojové pole, tohle si můžete spustit a mělo by to fungovat, ale zbytek už nechám na vás. Upozorňuji ještě na změnu $i = 0, PHP indexuje od 0.

$letters = range('A', 'E'); // jen pro testování, vytvoří pole ['A', 'B', 'C', 'D', 'E']

$data = []; // definice nového prázdného pole
for ($i = 0; $i < 5; $i++) { // váš cyklus, ale v PHP
  $data[] = [ // přidání nového zanořeného pole na konec pole $data
    'label' => $letters[$i],
    'value' => 'val'.$i,
    'spz' => 'spz',
  ];
}

echo json_encode($data); // vyexportování připravené datové struktury do JSON, který lze snadno použít v javascriptu
lukame
Profil *
OK, příklad funguje. U mě je to však pořád nulové. Asi to bude tím, jak vytvářím pole.
       
      $t=1;                        
      $sql_t = dibi::query('SELECT * FROM [tabulka]');      
                              while ($zaznam_=$sql_t->fetch(TRUE))
                                  { 
                                    $sql_prijmeni[$t]=$zaznam_["prijmeni"];
                                    $t++;
                                  }
        endif;
        

A toto: 'label' => $sql_prijmeni[$i] mi už nefunguje.


Takže ještě jinak. Pole se normálně naplní v pořádku Ale pak mi:
print_r($data); vypíše pole, ale
print_r(json_encode($data)); nevypíše nic. A proto mi nefunguje :

$("#name").autocomplete({
    source: <?php print_r(json_encode($data)); ?> ,
    select: function (event, ui) {
        event.preventDefault();
/*this.value = ui.item.label;*/
       $("#name").val(ui.item.label);
        $("#value").val(ui.item.value);
        $("#spz").val(ui.item.spz);
    }, 
    minLength: 2
});



8Aha.... json_encode funguje jen s utf8. Takže pomohlo mysql_query('SET NAMES utf8');

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: