Autor Zpráva
radvis
Profil
ahoj, sanžím se vypsat z php data jsonem, ale jsem z toho úplně zmatený. Zkouším to podle tutoriálu na programujte.com, ale vůbec nevím "co se děje". Vypast to v php je jednoduchý, ale když to chci vypsat do alertu tak bohužel nic.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>jSon</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<?php
$ret = array();  
$ret['stav'] = 0;  
$ret['text'] = 'Musíš se přihlásit';  
$ret['citat'] = '"Lépe pozdě, než nikdy."';  
//echo json_encode($ret); 

//$json_string = json_encode($ret);  
//$json = json_decode($json_string, true);  
   
// array (  
// 'stav' => 0,  
// 'text' => 'Musíš se přihlásit',  
// 'citat' => '"Lépe pozdě, než nikdy."',  
// )  
//var_export($json);    
//echo $json['citat']; // "Lépe pozdě, než nikdy."  
//echo $json['text']; 
//echo $json['stav']; 
?>
<script>
// v xhr.responseText máme JSON data  
var ret = $.parseJSON(xhr.responseText);    
$.each(ret, function(key, value) {  
alert(key + ': ' + value);  
});  
</script>


</body>
</html>


Díky za rady.
Aichi
Profil
soubor s PHP by měl být jiného názvu než soubor s HTML a JS. V JS mi chybí ta část kdy se dotážes serveru (url s PHP) na data a získáš objekt xhr.

V PHP naopak chybí převedení pole na json string a jeho vypsání, takže to fakt nemůže fungovat.
radvis
Profil
Prosím o nějaký tutoriál, hledal jsem po netu, ale nic, co by to popsalo dobře popsané. Zkoušel jsem to dodělat jak jsi napsal, ale bohužel nic.
Kcko
Profil
http://jquery-howto.blogspot.com
http://www.learningjquery.com/
radvis
Profil
Prosim i s php by to nebylo? Nebo kdyby se našel někdo hodny, kdo by mi ukazal na přikladu jak mit třeba 2 soubory třeba: index.php, data.php.

Php by bylo třeba:
//data.php
$ret = array();  
$ret['stav'] = 0;  
$ret['text'] = 'Musíš se přihlásit';  
$ret['citat'] = '"Lépe pozdě, než nikdy."';  
$return = json_encode($ret); 


a v index.php by mi stačil scrit (nejlepe jQuery), co by vzal data z php. Byl bych vám hodně vděčný, díky.
Kcko
Profil
v data.php by bylo
=====================
<?php 
$ret = array();  
$ret['stav'] = 0;  
$ret['text'] = 'Musíš se přihlásit';  
$ret['citat'] = '"Lépe pozdě, než nikdy."';  
$return = json_encode($ret); 

echo $return;
exit;
?>


a v v index.php by byl tento jQuery kod

<div id="result"></div>

<script type="text/javascript">
$(function(){


$.getJSON('data.php', function(data) {
  $('#result').text("Citát bude " + data.citat);
});


});
</script>
radvis
Profil
Funguje, díky moc jen bych se ještě chtěl zeptat, kdybych to dal v tom php do funkce jak by vypadal js kod? Díky.

<?php

public function test(){ 
$ret = array();  
$ret['stav'] = 0;  
$ret['text'] = 'Musíš se přihlásit';  
$ret['citat'] = '"Lépe pozdě, než nikdy."';  
$return = json_encode($ret); 

echo $return;
}
?>
Kcko
Profil
1/ Funkce by měla neco vracet, takže return $return;
2/ Kód bude vypadat pořád stejně.

Ty si prostě jen zavoláš adresu na nějaký soubor, který Ti vráti požadovaná data a ty vypíšeš.
Nehledej v tom žádnou vědu :-)
radvis
Profil
Zkoušel jsem to dat i do funkce i do cyklu, ale pořád nic.

while($show = mysql_fetch_array($vysledek)){
$ret = array();  
$ret['stav'] = 0;  
$ret['nick'] = $show['user_name'];  
$ret['citat'] = '"Lépe pozdě, než nikdy."';  
$return = json_encode($ret); 
echo $return;
}
//kdyz dam to echo s return pro } tak to vypíše jen poslední záznam


Stejný to je i s funkcí.
Aichi
Profil
nicméně těžko z JS zavoláš funkci v PHP, takže opět tam v tom PHP souboru budeš mít
echo test();
radvis
Profil
Ou, na to jsem měl přijít, díky .... ale bohužel pořád "nefunguje" cyklus. Vypíše to pouze poslední záznam z DB.
DJ Miky
Profil
Měl bys to ukládat do pole a přes json_encode() prohnat až všechny záznamy najednou:
$ret=array();
while($show = mysql_fetch_array($vysledek)){
$ret[] = array();  
$ret[]['stav'] = 0;  
$ret[]['nick'] = $show['user_name'];  
$ret[]['citat'] = '"Lépe pozdě, než nikdy."';  
}
$return = json_encode($ret); 
echo $return;
radvis
Profil
Upravil jsem si to takhle(citat byl v cyklu a byl tam tolikra, kolikrat byl zaznam v db):

$ret=array();
while($show = mysql_fetch_array($vysledek)){
$ret[] = array();   
$ret[]['nick'] = $show['user_name'];  
}
$ret['citat'] = '"Lépe pozdě, než nikdy."';  
$return = json_encode($ret); 
echo $return;


Teď mi to přečte citát, ale jak tam je to další pole tak to nevypíše ani jednoho uživatele.
radvis
Profil
js:
$.getJSON('kod.php', function(data) {
$('#result').text("Citát bude " + data.citat + data.nick);
});
Kcko
Profil
data[index].nick;
// za index si dosad libovolne cislo od 0 do počet řádku - 1


$ret=array();
while($show = mysql_fetch_array($vysledek)){
$ret[] = array();   
$ret[]['nick'] = $show['user_name'];  
}
$ret['citat'] = '"Lépe pozdě, než nikdy."';  
$return = json_encode($ret); 
echo $return;


A tučně zvýrazněný řádek si odmaž, nemá tam žádný smysl, akorat se ti zaplňuje pole prázdnou hodnotou po každé iteraci.
radvis
Profil
Kcko: To číslo tam není dobré, ja bych chtěl vybrat všechny uživatele (proto to mám v cyklu)
Kcko
Profil
radvis:
http://api.jquery.com/jQuery.each/
radvis
Profil
Moc mi to nepomohlo, nejde mi to jak chci:(. Chtěl bych aby se mi vypsali prostě nějak přezdívky podsebou a když přidám do db další zase se zařadí pod předchozí nick, ale ať dělám co dělám tak se mi to nedaří.
Kcko
Profil
Vlastní příklad:

data.php
------------------------------
<?php 

$ret=array();
foreach (array('Roman', 'Fanda', 'Jirka') as $name) 
{
    
    $ret[]['nick'] = $name;  
}
$ret['citat'] = '"Lépe pozdě, než nikdy."';  

$return = json_encode($ret); 
echo $return;
exit;

?>


index.php
------------------------------

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.js"></script>

<div></div>

<script>
var textToDiv = '';  
$.getJSON('data.php', function(data) {
   
  
$.each(data, function(key, value) {  
    if (key != 'citat')
        textToDiv += value.nick + "<br />";  
        
}); 

    textToDiv += "a jeste citat  " + data.citat;

    $("div").html(textToDiv);
});
</script>
radvis
Profil
Super, díky už jen se poprat s nette a nacpat to dotoho a pak to upravit tak aby když dám ten výpis do cyklu aby se automaticky tahali data vypsali jen ti novi uživatelé. JInak jsi hodný, že jsi mi to napsal.

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