Odkazování na elementy JavaScript – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Odkazování na elementy JavaScript – JavaScript, AJAX, jQuery – Fórum – Programujte.comOdkazování na elementy JavaScript – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

kozusnik
~ Anonymní uživatel
15 příspěvků
10. 11. 2012   #1
-
0
-

Ahoj, mám dotaz, a sice, jak odkázat na nějaký element tímto způsobem:

var cislo = 23;
var form = "form"+cislo;

var text = "text"+cislo;

var name = "name"+cislo;

ajax2.send("chatText23="+document.form.text.value+"&name="+document.form.name.value);

Mám v proměnné uložený název elementy a jak teď na ten element odkázat, abych v odkazu mohl použít tu proměnnou? Děkuji za rady.

Nahlásit jako SPAM
IP: 188.175.31.–
CZechBoY+4
Věrný člen
12. 11. 2012   #2
-
0
-

#1 kozusnik
co přesně chceš udělat

předávej buď element, nebo idečko, přes který se dostaneš k elementu přes document.getElementById(ID)

Nahlásit jako SPAM
IP: 94.112.108.–
kozusnik
~ Anonymní uživatel
15 příspěvků
13. 11. 2012   #3
-
0
-

děkuju, už jsem to vyřešil - tak jak jste říkal tím getElementById....
Ale mám druhý problém, a sice mám dejme tomu 3 chaty a u každého potřebuji, aby se mi co sekundu prováděl dotaz na databázi a vypisoval se text z databáze... problém ale je, že mi funguje pouze poslední volaná funkce na vypisování a ne všechny 3... nevím jak to vyřešit, mohli byste mi poradit? 
 AJAXOVÉ ZPRACOVÁNÍ A VYPSÁNÍ DIVŮ

<?php
require_once 'chatDiv.php';
?>
<?php
require_once 'chatDiv2.php';
?>
<?php
require_once 'chatDiv3.php';
?>
<script>
//id příspěvku
var id=0;
//čas obnovování
var timer=1000;
//ÄŤtecĂ­ a zapisovacĂ­ objekt
var ajax1 = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
var ajax2 = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
//čtení zpráv
function zpravy(recipient){
if(!ajax1){
alert("Tady AJAX neběží...");
return true;
}

ajax1.onreadystatechange= function () {text(recipient); } ;
//požadavek na čtené nových příspěvků
ajax1.open("GET", "include/chat/chatZpracovani.php?action=aktualizovat&id="+id, true);
ajax1.send(null);
return false;
}

//zápis zpráv
function posli(recipient){
if(!ajax2){
alert("Tady AJAX neběží...");
return true;
}
ajax2.onreadystatechange= function () {poslano(form, chat); } ;
ajax2.open("POST", "include/chat/chatZpracovani.php?action=poslat", true);
ajax2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//poslání hodnot z formuláře

chatForm = "chatForm"+recipient;
chatText = "chatText"+recipient;
recipientId = "recipientId"+recipient;
    
ajax2.send("chatText="+document.getElementById(chatText).value+"&recipientId="+recipient+"&senderId="+document.getElementById("senderId").value+"&senderName="+document.getElementById("senderName").value);
return false;
}

//úkony pro poslání zprávy
function poslano(recipient){
if (ajax2.readyState == 4){
if(ajax2.status == 200  || ajax2.status==0){
//pokud se zpráva uložila, dojde k vymazání prvku se zprávou
if(ajax2.responseText=="ok"){
    

chatText = "chatText"+recipient;    
document.getElementById(chatText).value="";
zpravy(recipient);
}
else alert("Bohužel se nepodařilo zprávu odeslat ");
}
else alert("Chyba: "+ ajax2.status +":"+ ajax2.statusText);
}
}
//vypsání získaných příspěvků
function text(recipient){
var txt;
var param= new Array();
if (ajax1.readyState == 4){
if(ajax1.status == 200  || ajax1.status==0){
//rozdělení textového řetězce na text a id
param=ajax1.responseText.split("|id=");
//výpis do DIVu chtext
//recipient = 23;
chtext = "chtext"+recipient;
document.getElementById(chtext).innerHTML = param[0] + document.getElementById(chtext).innerHTML;
//uložení id nejaktuálnějšího příspěvku
}
else alert("Chyba: "+ ajax1.status +":"+ ajax1.statusText);
}
}
//aktualizace příspěvků
window.setInterval("zpravy(1)", 1000);
window.setInterval("zpravy(2)", 1000);
window.setInterval("zpravy(3)", 1000);




//function aktualizovat(){
//window.setTimeout("aktualizovat()", timer);
//zpravy();
//}

</script>   

<div class="clear"></div>

chatDiv.php

<div id="section" class="chat red left"> 
<div class="info">
<h1>Mark</h1>
<h2>online</h2>
</div>
<div class="text">

<ul id="chtext1" class="scroll">  
</ul>
 
<form name="chatForm1" id="chatForm1" action="include/chat/chatZpracovani.php?action=poslat" method="POST">
<input type="text" size="20" id="chatText1" name="chatText1" value="">
<input type="hidden" id="senderId" name="senderId" value="<?php echo $_SESSION['id'];?>">
<input type="hidden" id="senderName" name="senderName" value="<?php echo $_SESSION['username']; ?>">
<input type="hidden" id="recipientId" name="recipientId" value="1">
<input onclick="return posli(1);" type="submit" value="poslat">
</form>    
</div>
<div class="status left"><img src="images/on.png"><form method="post" action="">
<input type="status" name="chat_status" id="chat_status" class="chat_status" placeholder="nějaký status">
</form>
</div>
<div class="settings right">Settings</div>
<div class="clear"></div>
</div>


chatDiv2.php
 

<div id="section" class="chat lime left"> 
<div class="info">
<h1>Mark</h1>
<h2>online</h2>
</div>
<div class="text">

<ul id="chtext2" class="scroll">  
</ul>
 
<form name="chatForm2" id="chatForm2" action="include/chat/chatZpracovani.php?action=poslat" method="POST">
<input type="text" size="20" id="chatText2" name="chatText2" value="">
<input type="hidden" id="senderId" name="senderId" value="<?php echo $_SESSION['id'];?>">
<input type="hidden" id="senderName" name="senderName" value="<?php echo $_SESSION['username']; ?>">
<input type="hidden" id="recipientId" name="recipientId" value="2">
<input onclick="return posli(2);" type="submit" value="poslat">
</form>    
</div>
<div class="status left"><img src="images/on.png"><form method="post" action="">
<input type="status" name="chat_status" id="chat_status" class="chat_status" placeholder="nějaký status">
</form>
</div>
<div class="settings right">Settings</div>
<div class="clear"></div>
</div>

chatDiv3.php
 

<div id="section" class="chat blue left" style="margin: 0px;"> 
<div class="info">
<h1>Mark</h1>
<h2>online</h2>
</div>
<div class="text">

<ul id="chtext3" class="scroll">  
</ul>
 
<form name="chatForm3" id="chatForm3" action="include/chat/chatZpracovani.php?action=poslat" method="POST">
<input type="text" size="20" id="chatText3" name="chatText3" value="">
<input type="hidden" id="senderId" name="senderId" value="<?php echo $_SESSION['id'];?>">
<input type="hidden" id="senderName" name="senderName" value="<?php echo $_SESSION['username']; ?>">
<input type="hidden" id="recipientId" name="recipientId" value="3">
<input onclick="return posli(3);" type="submit" value="poslat">
</form>    
</div>
<div class="status left"><img src="images/on.png"><form method="post" action="">
<input type="status" name="chat_status" id="chat_status" class="chat_status" placeholder="nějaký status">
</form>
</div>
<div class="settings right">Settings</div>
<div class="clear"></div>
</div>

chatZpracovani.php
 

<?php
$connect = mysql_connect ("xxxx", "xxxx", "xxxx") or die ("Nepodařilo se připojit k databázi");
mysql_select_db("xxxx");

//získání id, defaultně 0
$lastid=isset($_GET["id"])?$_GET["id"]:0;
//zjištění akce (aktualizovat/poslat), defaultně aktualizovat
$action=isset($_GET["action"])?$_GET["action"]:"aktualizovat";

switch($action){
case "aktualizovat":
//pokud id=0 tak se vybere z databáze 30 nejnovějších příspěvků
if ($lastid<=0) $result = mysql_query("SELECT *  FROM chat ORDER BY time desc limit 30");
//jinak příspěvky s id větším než zadaným
else $result = mysql_query("SELECT * FROM chat WHERE chat.id > {$_GET['id']} ORDER BY time desc");
//pro každý příspěvek se vygeneruje HTML kód
while ($zaznam = mysql_fetch_array($result)){
echo '<li><h3>'.$zaznam['name'].'</h3><span class="time">'.$zaznam['time'].'</span>'.$zaznam['text'].'</li>';
//do proměnné lastid se bude ukládat nejvyšší id
$lastid=($lastid>$zaznam['id'])?$lastid:$zaznam['id'];
}
//na konec je vypsáno nejvyšší aktuální id za oddělovačem, šlo by to samozřejmě udělat i jiným způsobem...
echo "|id=$lastid";
break;
case "poslat":
//pokud jsou vloženy potřebné údaje, je příspěvek vložen do databáze
if (isset($_POST["chatText"]) and $_POST["chatText"]!=''){
 
if (mysql_query("INSERT INTO chat (sender, name, recipient, time, text) VALUES('".$_POST['senderId']."','".$_POST['senderName']."','".$_POST['recipientId']."',NOW(), '".nl2br(htmlspecialchars($_POST["chatText"]))."')" )) 
//odpověď pokud se zápis do databáze povedl1
echo "ok";
}
break;
} 
?>

Nevím si s tím rady.... mohli byste mi poradit? Děkuji


Nahlásit jako SPAM
IP: 188.175.31.–
peter
~ Anonymní uživatel
4014 příspěvků
16. 11. 2012   #4
-
0
-

Ajaxove funkce jsou casovane jako casovace. Pokud ta funkce jeste neskonci a ty ji prepises, pak se nedokonci.

function zpravy(recipient){
...

ajax1.onreadystatechange= function () {text(recipient); } ; // tady prepisujes funkci onready

window.setInterval("zpravy(1)", 1000);
window.setInterval("zpravy(2)", 1000);
window.setInterval("zpravy(3)", 1000);

Tady volas spoustis vsechny 3 funkce temer ve stejnem okamziku. Casovy diagram vypada asi takto:

s.o....................p......

....s...o......p...........

.........s......o.................................p...

s-start, o-odesli, p-prijmi

Prijmuti dat prvniho jeste nenastalo a ty uz mu prepises navratovou funkci zcela jinou.

Co s tim? Spustit to se zpozdenim 100ms. Lepe udelat 3 ruzne ajax1, ajax2, ajax3, ktera se bude starat kazda o sve vlastni okenko (ajax=[]; ajax[0]=new request...). a uplne nejlepe, poslat vsechna data v jedinem pozadavku a pak si to javascriptem rozkouskovat na 3 okna.

Nahlásit jako SPAM
IP: 2001:718:2601:400:0:5efe:...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Podobná vlákna

Klávesové odkazování — založil Filip Had

XML elementy -> String Array — založil dawnMist

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý