Autor Zpráva
Pinqui
Profil
Dobrý den chtěl bych se zeptat, jak vložit soubor, který vytáhnu pomocí scriptu:
<script type="text/javascript">
var vystup = document.getElementById('vystup');

function stahniData(akce) {

    // odmazeme stary skript, pokud existoval
    var hlavicka = document.getElementsByTagName('head')[0];
    var dataLoader = document.getElementById('scriptLoader');
    if(dataLoader) hlavicka.removeChild(dataLoader);

    // vytvorime novy element script
    script = document.createElement('script');
    script.id = 'scriptLoader';
    script.src = 'javascript-rpc.php?akce='+akce+'&r='+Math.random();

    // POZOR, DULEZITE!! Skript musime vlozit do stranky 
    // pomoci DOM - appendChild()
    // Ihned po vlozeni prohlizec stahne skript a spusti jej
    x = document.getElementsByTagName('head')[0];
    x.appendChild(script);

    return false;
}

function vypisText(txt) {
    // nejsnazsi cesta, vlozime novy kod ke staremu na konec
    vystup.innerHTML += txt;
}

function chyba(txt) {
    // obycejny alert s hlaskou
    alert(txt);
    return true;
}

function vymazData() {
    // v jednoduchem cyklu smazeme vsechny elementy v prvku vystup
    while(vystup.hasChildNodes()) vystup.removeChild(vystup.childNodes[0]);
    return false;
}
</script>


ktery jsem nasel na chose.cz

například do frame jmenem window, abych to mohl mít na jedné stránce ten script. Děkuji
<frameset cols="*,210" id="frameset1" border="0">
	<frameset rows="35,*,15,35" id="frameset2">
		<frame name="1" src="" marginheight="4" marginwidth="10"scrolling="no">
		<frame name="window" src="" scrolling="auto">
		<frame name="3" src="" scrolling="no" border="0" marginwidth="5" marginheight="1" frameborder="0">
		<frame name="4" src="" marginheight="4" scrolling="no">
	</frameset>
	<frameset rows="35,*,50,35" id="frameset3">
		<frame name="5" src="" marginheight="4" scrolling="no">
		<frame name="6" src="" border="0">
		<frame name="7" src="" scrolling="no">
		<frame name="8" src="" scrolling="no">
	</frameset>
</frameset>
peta
Profil
window je zakladni objekt, alert(txt) je spravne zapsany jako window.alert(txt);
jakpsatweb.cz - javascript - objekt window
jakpsatweb.cz - javascript - priklady - prace s okny
Prostuduj
Pinqui
Profil
já vím jak funguje ten script, ale ve frame window mám javascriptem napsane

<html>
<body>
<div id="vystup"></div>
</body>
</html>


ale nejde mi ta načítaná stránka vypsat v tom elementu vystup
Pinqui
Profil
Teď mám stavbu takto, ale prostě se mi to v tom frame neukáže:

data.php:

<?php
print "<html>\n";
print "<head>";
?>
<script type="text/javascript">
/* <![CDATA[ */
var vystup = document.getElementById('vystup');

function stahniData(akce) {
	
	// odmazeme stary skript, pokud existoval
	var hlavicka = document.getElementsByTagName('head')[0];
	var dataLoader = document.getElementById('scriptLoader');
	if(dataLoader) hlavicka.removeChild(dataLoader);
	
	// vytvorime novy element script
	var script = document.createElement('script');
	script.id = 'scriptLoader';
	script.src = 'javascript-rpc.php?akce='+akce+'&r='+Math.random();
	
	// POZOR, DULEZITE!! Skript musime vlozit do stranky pomoci DOM - appendChild()
	// Ihned po vlozeni prohlizec stahne skript a spusti jej
  var x = document.getElementsByTagName('head')[0];
	x.appendChild(script);
	
	return false;
}

function vypisText(txt) {
	// nejsnazsi cesta, vlozime novy kod ke staremu na konec
	vystup.innerHTML += txt;
}

function chyba(txt) {
	// obycejny alert s hlaskou
	alert(txt);
	return true;
}

function vymazData() {
	// v jednoduchem cyklu smazeme vsechny elementy v prvku vystup
	while(vystup.hasChildNodes()) vystup.removeChild(vystup.childNodes[0]);
	return false;
}

stahniData('dolly');
/* ]]> */
</script>
<?php
print "</head>";
print "<div id=\"vystup\"></div>";
print "<frameset cols=\"*,210\" id=\"frameSet1\" border=\"0\">\n";

print "	<frameset rows=\"20,*,53\" id=\"frameSet2\">\n";
print "		<frame name=\"info\" src=\"\" scrolling=\"no\">\n";
print "		<frame name=\"read\" src=\"\" scrolling=\"no\">\n";
print "		<frame name=\"write\" src=\"data.php\" scrolling=\"no\">\n";
print "	</frameset>\n";
print "	<frameset rows=\"21,*,54\" id=\"frameSet3\">\n";
print "		<frame name=\"top\" src=\"\" scrolling=\"no\">\n";
print "		<frame name=\"menu\" src=\"\" border=\"0\">\n";
print "		<frame name=\"smile\" src=\"\" scrolling=\"no\">\n";
print "	</frameset>\n";
print "</frameset>\n";
print "</html>\n";

?>



javascript-rpc.php:
<?php

if (isset($_GET['akce'])) {
    $akce = $_GET['akce'];
    
    switch ($akce) {
        case "dolly":
        echo dolly();
        break;
        
        default:
        echo "chyba('Byla zavolána neplatná metoda!');";
        break;
    }
}

function dolly() {
    $vybrano = "ahoj";
    
    return "vypisText('<p><strong>".date("d.m.Y H:i:s")."</strong>: ".addslashes($vybrano)."</p>')";
}

?>


když to skusím bez frame tak to jde ale nemohu to dostat do toho divu ve frame..
píše mi to chybu:

vystup is null
[Break on this error] vystup.innerHTML += txt;

a nevím, jak to udělat aby se mi to vložilo do toho frame read do divu vystup
Prosím o radu děkuji
peta
Profil
Ze by pokus o odkaz na stranku? Odkaz by byl lepsi :)

Chyba je zde:
print "<head>";
?>
<script type="text/javascript">
/* <![CDATA[ */
var vystup = document.getElementById('vystup');
// tady ti musi JS konzola hlasit, ze objekt s ID = vystup neexistuje, protoze tento script muzes zavolat jen a pouze kdyz existuje BODY a DIV.
S odkazem na stranku jsem ti to mohl rici hned, staci si v jakemkoliv prohlizeci otevrit JS konzolu, krome IE. Kde to samozrejme bude chodit :)

Pokud neexistuje objekt, tato akce je neplatna
vystup.innerHTML += txt;

Co s tim?
1. var vystup = document.getElementById('vystup');
na
var vystup = null;
2.
var hlavicka = document.getElementsByTagName('head')[0];
na
vystup = document.getElementById('vystup');
var hlavicka = document.getElementsByTagName('head')[0];
Treba, nebo jinak, primo to dat do te funkce
document.getElementById('vystup').innerHTML += txt;
Pinqui
Profil
Mno pořád mi to háže null viz:

http://superpokec.cz/test/

// vyřešeno už jsem přišel na to, kde dělám chybu :-)
Pinqui
Profil
Ještě bych se chtěl zeptat, když upravím:

script.src = 'javascript-rpc.php?akce='+akce+'&r='+Math.random();

na

script.src = 'javascript-rpc.php?akce='+akce+'&id='+id+'&r='+Math.random();


přičemž nadefinuje na začátku že id je $_GET['id']

a javascript-rpc.php bude vypadat nějak takto:

<?php

if (isset($_GET['akce'])) {
    switch ($_GET['akce']) {
        case "dolly":
        echo dolly($_GET['id']);
        break;
        
        default:
        echo "chyba('Byla zavolána neplatná metoda!');";
        break;
    }
}

function dolly($id) {
    if($id != 0){
    $query = $db->query("select * from texty where id > '$id'");
    while($sel = $query->fetch_assoc()){
    return "vypisText('<p><strong>".date("d.m.Y H:i:s")."</strong>: ".addslashes($sel['text'])."</p>')"; 
    }
    }else{
    $query = $db->query("select * from texty order by id DESC limit 25");
    while($sel = $query->fetch_assoc()){
    return "vypisText('<p><strong>".date("d.m.Y H:i:s")."</strong>: ".addslashes($sel['text'])."</p>')"; 
    }
    }
}

?>


Nevím zda by to fungovalo jen to zkouším s js nemám zkušenosti teda ne moc tak se ptám.

Tak jestli se:
1) dá nějak pracovat s tím id? aby při prvním výběru kdy bude nulové to $_GET['id'] to vybralo posledních 25 přízpěvků s tím že to do toho get přidalo už id posledního přízpěvku
2) jestli se dá nějak zjistit kolik řádků: (txt, += txt) to vypsalo a třeba po 25 se poslední mazal, aby se nedělal nekonečný strom


adresu $_GET, která je předána javascriptem není vidět a to je výhodou, nicméně s tím neumím pracovat tak bych se rád optal skušenějších. Ocením i stránky, kde by se o podobných věcech zmiňovali, hledal jsem dost, ale nenašel jsem to co potřebuji. Předem děkuji
Pinqui
Profil
Tak s tím id vyřešeno přez session, ale bohužel jsem se dostal k tomu, že nevím jak udělat aby mi to z té mysql vypsalo ty data. jak mám vrátit výsledek těch dat v řádcích aby co řádek z mysql to řádek na obrazovce..

chybu dělám asi někde u :return "vypisText('<p><strong>".date("d.m.Y H:i:s")."</strong>: ".addslashes($sel['text'])."</p>')";


prosím poraďte
peta
Profil
JS forum, JS pracuje u klienta, ten ma HTML, CSS, JS. Proc sem do fora davas PHP kod, ktery pracuje na serveru? Kolik lidi znalych HTML, CSS, JS ovlada PHP? Nelogicke.

Tohle mam v jednom programu PHP/Oracle
$SQL_query['osoba'] = "
SELECT *
FROM osoby
WHERE osobidno = 'AAA'
";

$query = $SQL_query['osoba'];
$query = str_replace('AAA',$stud_id,$query);
$vysl = fce_sq($query); // uvnitr mysql_query, mysql_error a dalsi pomucky pro zjisteni chyby
echo '<pre>'; print_r($vysl);
// vypsani jinak
$t = '';
foreach($vysl as $key=>$value)
{ $t.= "\n";
foreach($value as $key1=>$value1)
{$t.= $value1.',';}
}
echo $t;
Vypada to obtizne?
Ve tem pripade privni cyklus bude neco jako
while($sel = $query->fetch_assoc())
coz ti do $sel ulozi jeden radek tabulky. Ty mas v tom cyklu return, takze to okamzite ukonci funkci. Asi te vic nez prvni radek nezajima.

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0