Diskuze: Načtení asociativního pole a vytvoření js objektu
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 13 zpráv z 13.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.


Zkus si googlem najit priklad
google = php jquery ajax example
To jsou nejake stripky kodu, z toho nelze odvodit, kde je problem.
Vidim tam treba return a tukam si na celo, proc nepouzil echo? Pak se zamyslim,
treba to ma obalene ve funkci, kterou sem ale lajdak darebak nedal!
Nevim. Zkus misto ajaxu zavolat primo tu url, co ti to vypise na obrazovku. Rekl
bych ti jakou, ale neznam vysledky funkci a hodnoty promenych
admin_url('admin-ajax.php')
param_args
// Adresa by mohla byt, i bez arg
admin-ajax.php?action=rn_recalc&args=
neco/admin-ajax.php?action=rn_recalc&args=neco
admin/admin-ajax.php?action=rn_recalc&args=neco
admin-ajax.php // teoreticky by mohlo stacit tohle
url:"<?php echo admin_url('admin-ajax.php'); ?>",
Jinak, tohle je dost nespolehlivy zapis. admin_url by musela splnovat nekolik
podminek pro escapovani, jinak by to mohlo rozhodit html, js kod. Napr nesmi mit
znaky " a \ a nejake dalsi.
Díky za reakci. Je to na wordpressu, takže ajax musím řešit přes jejich funkci (admin-ajax.php). Potřebuju vrátit jen to pole jako proměnou, pokud dám print_r a příslušně upravím ajax, tak se mi vše zobrazí správně. Problém je dostat to php pole do js objektu.
Pak je php ok, kdyz se to dobre zobrazi. Kazdopadne to return tam bez dalsiho
kodu nedava smysl, protoze echo posila data uzivateli.
Je mozne, ze kdyz mu tam das type=json, ze on sam udela JSON.parse, takze, ty to
pak delas duplicitne.
Ja jquery ajax nepouzivam, ale zkopiroval bych si priklad z dokumentace. Fakt
bych zacal nejakym funkcnim prikladem a ne pokusem z hlavy.
Dospěl jsem k funkčnímu řešení, ale že bych všemu rozuměl...
php:
echo json_encode($rn_pole); //asociativní pole
js:
$.ajax(
{
url:"<?php echo admin_url('admin-ajax.php'); ?>",
type:"POST",
data: {action:"rn_recalc","args":param_args},
success: function(response) {
var rn_result=$.parseJSON(response.slice(0, -1)); // z nějakého důvodu to vrací na konci řetězce 0, která pak vyhodí chybu....takže jsem jí natvrdo vymazal
var rn_keys=Object.keys(rn_result); //načtu klíče objektu kvůli iteraci
for(i=0;i<rn_keys.length;i++ ){
$('#rn_count_item_'+rn_keys[i]).text(rn_result[rn_keys[i]]); // tady si změním hodnoty jak chci
}
}
To mas v php asi nejaky error. Zkus si zobrazit jen tu adresu, php soubor v
prohlizeci. Tam musi byt ta nula taky.
Na testy musis mit jednoduchy priklad, ktery se da copy-paste a spustit. Dal
jsem si tu praci a mne to normalne funguje, ve firefoxu.
<?php
// http://localhost/jquery/test.php
if (isset($_GET['action']))
{
$pole = array("aa"=>1, "bb"=>2);
echo json_encode($pole); //asociativní pole
}
else
{
?>
<input type=button onclick="odesli()" value="odesli">
<div id=out></div>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script>
function odesli()
{
// https://api.jquery.com/jquery.ajax/
$.ajax({
url : "test.php",
data : {action: "rn_recalc", args: "param_args"},
type : "GET",
success: prijmi
});
}
function prijmi(response)
{
var el, json;
el = document.getElementById('out');
el.innerHTML += response;
json = $.parseJSON(response);
key_list = Object.keys(json);
for(i=0;i<key_list.length;i++) // tady se da pouzit: for (i in json)
{
el.innerHTML += '<br>' + key_list[i] + ': ' + json[key_list[i]];
}
}
</script>
<?php
}
?>
Jestli ten vypis mas soucasti dalsiho kodu a nechce se ti hledat, kde mas chyba, dala by se pouzit finticka s ob, kterou pouzivam pro download souboru. Z toho celeho te zajima jen ob, echo, exit. To ostatni souvisis s download, nastaveni hlavicek.
ob_clean(); // smaza obrazovku
header('Content-Description: File Transfer');
header('Content-Transfer-Encoding: binary');
header('Content-Encoding: '.$charset);
header('Content-Type: '.$type.'; charset='.$charset);
header('Content-Disposition: attachment; filename="'.$file.'"');
header('Content-Length: '.$size);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
//header("Cache-Control: no-store, no-cache");
header('Pragma: public');
header('Expires: 0');
echo $content;
exit(); // ukonci script
Já tam prostě žádnou chybu nevidím...
tohle je php, který tvoří to pole:
$rn_maker_counts=array('xxx' => count_post_by_key_and_category($param_args['key'],$param_args['cat'],$param_args['typ'],$param_args['stav'],$param_args['lokalita'],$param_args['cena_min'],$param_args['cena_max'],'x'));
$rn_maker=get_terms( array(
'taxonomy' => 'maker',
'fields' => 'ids',
'hide_empty'=>0
) );
for($i=0;$i<count($rn_maker);$i++){
$rn_cat_count=count_post_by_key_and_category($param_args['key'],$param_args['cat'],$param_args['typ'],$param_args['stav'],$param_args['lokalita'],$param_args['cena_min'],$param_args['cena_max'],$rn_maker[$i]);
$rn_maker_counts += [ $rn_maker[$i] => $rn_cat_count ];
}
$rn_pole=$rn_cat_counts+$rn_stav_counts+$rn_lok_counts+$rn_maker_counts; //ty tři pole předtím mají totožný kod
echo json_encode($rn_pole);
a výstup bez slice:
...."199":0,"200":0,"201":0,"202":0,"203":0}0
fakt netuším co mi tam tu nulu přidává
A muj kod ti tam nulu nedava?
Pak je samozrejme rozdil mezi mym a tvym kodem. Hledej. Pred a za php tagy take
nesmi bych zadny vypis.
neco-mezera-prazdny-radek<?
?>neco-mezera-prazdny-radek
Zkus ten ob_clean (smaze vse pred) a exit (ukonci program, takze smaze vse za).
Zkus ty vardumpy. Bud selze nektera z tech funkci, u kterych nevim, jaky maji kod a jake davaji vysledky v pripade, ze treba najde 0 vysledku. A nebo tam mas dalsi php/html kod, ktery si tam vypisuje neco navic. Dopsal jsem tam komentare, kde by mne zajimaly vysledky, abych tu cast mohl zakomentovat a nahradit vysledkem pro ten muj tester. Kdo vi, treba tam fakt vznikne neco necekaneho.
if (isset($_GET['action']))
{
// $pole = array("aa"=>1, "bb"=>2);
// echo json_encode($pole); //asociativní pole
$rn_maker_counts = array(
'xxx' => count_post_by_key_and_category( // jaky je vysledek funkce?
$param_args['key'],
$param_args['cat'],
$param_args['typ'],
$param_args['stav'],
$param_args['lokalita'],
$param_args['cena_min'],
$param_args['cena_max'],
'x'
)
);
// var_dump($rn_maker_counts);
$rn_maker = get_terms( array( // jaky je vysledek funkce?
'taxonomy' => 'maker',
'fields' => 'ids',
'hide_empty' => 0
));
// var_dump($rn_maker);
for($i=0; $i<count($rn_maker); $i++)
{
$rn_cat_count = count_post_by_key_and_category( // jaky je vysledek funkce?
$param_args['key'],
$param_args['cat'],
$param_args['typ'],
$param_args['stav'],
$param_args['lokalita'],
$param_args['cena_min'],
$param_args['cena_max'],
$rn_maker[$i]
);
// var_dump($rn_cat_count);
$rn_maker_counts += array( $rn_maker[$i] => $rn_cat_count ); // tady bych pouzil array, [] funguje az v novych php
// var_dump($rn_maker_counts);
}
$rn_pole = $rn_cat_counts + $rn_stav_counts + $rn_lok_counts + $rn_maker_counts;
//var_dump($rn_cat_counts, $rn_stav_counts, $rn_lok_counts, $rn_maker_counts);
echo json_encode($rn_pole);
}
Jeste tohle by mohlo byt problematicke. Nevim, jak moc je spolehlive scitani poli. Nebo, pokud je predchozi hodnota 0 a ne pole.
//$rn_maker_counts += array( $rn_maker[$i] => $rn_cat_count );
$rn_maker_counts = array('a'=>'b');
var_dump($rn_maker_counts);
$rn_maker_counts = array('a'=>'b') + array('c'=>'d')
var_dump($rn_maker_counts);
$rn_maker_counts = array('a'=>'b');
$rn_maker_counts['c'] = 'd';
var_dump($rn_maker_counts);
$rn_maker_counts = 0 + array('c'=>'d')
var_dump($rn_maker_counts);
$rn_maker_counts = '' + array('c'=>'d')
var_dump($rn_maker_counts);
$rn_maker_counts = false + array('c'=>'d')
var_dump($rn_maker_counts);
Tak chybka byla v tom, že wordpress (ta třída admin-ajax.php) vyžaduje ukončení php části die(). To že to tam nebylo přidávalo tu nulu. Díky moc za tvůj čas a rady.
Zobrazeno 13 zpráv z 13.