Autor Zpráva
quatzael
Profil
Mám trochu začátečnickej dotaz. Jedná se o klasickej AJAXovej script:

if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  
   }
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
     document.getElementById("myel").innerHTML=xmlhttp.responseText;
     }
   }
 xmlhttp.open("GET","exph.php?q="+phvaluer,true);
 xmlhttp.send();

všechno běhá jak má, ale potřeboval bych, aby zároveň javascript dostal libovolnou hodnotu proměnné z toho exph.php a mohl jí hned použít v příkazu jako např:

window.alert(promennazphp);

Snad chápete co myslím.

Díky.
1Pupik1989
Profil
Přečti si něco o JSON.
quatzael
Profil
Moc z toho moudrej nejsem. Nehledám to nejelegantnější fancy řešení pomocí jquery, ale spíš standartní jednoduchý způsob..
Jinak jednoduše to fakt nejde?? Nikde jsem zatím v tom JSON nenašel řešení na tohle, pořád jen samý pole..
Rfilip
Profil
Scriptem ezph.php si rucne vypis jmena promenych a prirazeni jejih hodnot dle syntaxe Javascriptu.
Js: vytvor si v hlavice novy script element, jehoz vlastnost innertext = xmlhttp.responstext.
Pote jiz muzes php promene uzivat dle libosti.
quatzael
Profil
ale jak ho mám potom odcyhytit? document.getElementById použít nemůžu, protože element <script> nemá id atribut...
Rfilip
Profil
Vytvor si ho javascriptem pri zpracovani ajaxu. Pokud by takto potreboval hodnoty aktualizovat,promenou ve ktere ho vytvoris si ponech a pak uz men vlastnost innertext…
quatzael
Profil
asi to nechápu. v HTML mám element <span id="myel"> do toho se mi z php přes ten výše uvedenej javascript vkládají z databáze hodnoty pro select. To je ok. Ale když chci z toho php scriptu zvlášť ještě použít hodnoty proměnný pro účel toho window.alert tak vůbec nevím co tam k tomu javascriptu mám přidat. Všechno echo z php jde přece do toho elementu "myel"..

Prosím o nějaké názornější vysvětlení, tohle dělám fakt poprvé..
Kajman
Profil
PHP skriptem si vrátíte JSON, kde bude v rámci jednoho objeku (ale zvlášť) text a proměnná.

Např. díky json_encode něco jako

{
    "text": "Text do spanu",
    "alert": "Text pro alert"
}

Pak si třeba evalem dáte ten objekt do klasické proměnné v javascriptu a použijete jednotlivé části.

var vraceno = eval('(' + xmlhttp.responseText + ')');
document.getElementById("myel").innerHTML=vraceno['text'];
window.alert(vraceno['alert']);
1Pupik1989
Profil
Text do spanu pak můžeš přidat z proměnné, nebo jak jsem psal jsonem. Php script ti vrátí objekt a ty ho akorát protáhneš třeba pomocí eval. Pokud budeš odesílat i s nějakým textem, tak akorát použiješ match na vyhledání objektu. Já s tím také teprve nedávno opět začal.

Edit:// předběhli mě :)
quatzael
Profil
no tak do javasrcriptu jsem zkopčil to Tvoje:

var vraceno = eval('(' + xmlhttp.responseText + ')');
document.getElementById("myel").innerHTML=vraceno['text'];
window.alert(vraceno['alert']);


a do php jsem dal:

$vraceno = array();
$vraceno['text'] = '<h1>TEXT</h1>';
$vraceno['alert'] = 'ALERT';
echo json_encode($vraceno);


ale nefunguje to.. nerozumím jak funguje ten json_encode... to se ani nedá nikde dohledat v knížkách a manuálech..
quatzael
Profil
teď jsem ještě zkusil do toho php dát přímo:

var $text = '<h1>TEXT</h1>';
var $alert = 'ALERT';

a

echo "{\"text\":" . $text . ", \"alert\":" . $alert . "}";

nebo

echo "{\"text\": \"" . $text . "\", \"alert\": \"" . $alert . \""}";

a ani jedno nefunguje...:-(
Kajman
Profil
quatzael:
ale nefunguje to

A jak to nefunguje? Je něco v chybové konzoli? Co přesně vrátí ten php skript? Teď jsem to zkoušel, a mně to funguje.

Jinak hodně prohlížečů má po stisku F12 nástroje, kde si můžete sledovat síťovou komunikaci včetně obsahu atp.
quatzael
Profil
mě to při tom ladění furt háže hlášku, že je u toho var vraceno = eval('(' + xmlhttp.responseText + ')'); špatná syntaxe.

to je asi tím, že už z toho php to jde do toho špatně..

mám tam:

var $text = '<h1>TEXT</h1>';
var $alert = 'ALERT';
echo "{\"text\":" . $text . ", \"alert\":" . $alert . "}";
Chamurappi
Profil
Reaguji na quatzaela:
furt háže hlášku … špatná syntaxe
Protože to, co vracíš (klidně se na to normálně podívej přes prohlížeč), není platný JavaScript.
quatzael
Profil
a kde je teda chyba?? dávám tam jen věci co mi tady poradili..


Reaguji na Chamurappiho:

co mám udělat, aby ten javascript začal být platný..??
Chamurappi
Profil
Reaguji na quatzaela:
Najít chybu a opravit chybu. Syntaktické chyby patří mezi ty nejjednodušší. Pokud nedokážeš rozpoznat, jestli řetězec psát do uvozovek, nebo jestli ti někde nepřebývá závorka, tak máš smůlu.
peta
Profil
quatzael:
"co mi tady poradili" Tim bych se moc nechlubil. Najit chybu je zaklad. Resit kazdou chybu a dotaz pres forum, to kdyby delal kazdy, tak je tu stovka dotazu za minutu.
Syntaxe se dobre zjistuje v programu, ktery obarvuje kod. Treba pspad? Toto forum tez obarvuje kod.
<script>
var vraceno = eval('(' + xmlhttp.responseText + ')');
</script>
Tady to obarveni je nic moc, ale v tomto kousku kodu se zda, ze chyba snad ani neni. spis nekde v kodu nad tim.

var $text = '<h1>TEXT</h1>';
var $alert = 'ALERT';
echo "{\"text\":" . $text . ", \"alert\":" . $alert . "}";
To echo vypise co? zkousel jsi ten php pustit samostatne v prohlizeci?
{"text":<h1>TEXT</h1> ,"alert":ALERT};
prepsano do kodu nahore, evalovano
<script>
var vraceno = {"text":<h1>TEXT</h1> ,"alert":ALERT};
</script>
Chamurappi: ti ale psal, ze tohle neni javascriptovy kod. Retezec se preci dava do apostrofu. Ty tam zadne nemas.
---
Chamurappi - dik, mezi tim jsem doplnil prispevek :)
Chamurappi
Profil
Reaguji na peta:
spis nekde v kodu nad tim
Ne, chyba je v tom, co stahuje.
1Pupik1989
Profil
Psát string jako interger asi nepůjde.
quatzael
Profil
Echo jsem opravil na:

$text = "<span>TEXT</span>";
$alert = "ALERT";
echo "<p>{\"text\": \"" . $text . "\", \"alert\": \"" . $alert . "\"}</p>";

A javascript jsem upravil na:

var vraceno = eval('(' + xmlhttp.responseText + ')');
document.getElementById("myel").innerHTML=vraceno.text;
window.alert(vraceno.alert);       

Ale to var vraceno = eval('(' + xmlhttp.responseText + ')'); je furt špatně.. potřebuju, aby proměnná vraceno získala z php echo přesně v podobě v jaký ho to php posílá, tedy:

{"text" : "<span>Text</span>" , "alert" : "Alert" }

Může plís někdo ochotnej poradit..??
Kajman
Profil
quatzael:
Echo jsem opravil

Proč tam proboha cpete to <p>? Zkontrolujte si, co přesně Vám vrací ten php skript, třeba na http://jsonlint.com/ a opravte si to. Případně sem pošlete odkaz na ten php, když to nezvládnete zkontrolovat sám.
quatzael
Profil
to <p> jsem tam přenesl nedopatřením, když jsem to testoval v jiným dokumentu.. Dal jsem to pryč a už to funguje!!

Díky moc!!!

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: