Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Ajax + DOM
Vezi mesajul original
Du-te la pagina 1, 2  Următoare
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> AJAX
Subiectul anterior :: Subiectul următor  
Autor Mesaj
UnTip



Data înscrierii: 03/Mai/2007
Mesaje: 377

Trimis: Mar Oct 02, 2007 1:28 pm    Titlul subiectului: Ajax + DOM  

am o functie care imi intoarce printr-un request ajax un div care are onclick o alta functie si tot asa.... la un moment dat.. imi este adus din baza de date... anumite inregistrari afisate in niste inputuri de tip text, eu nu stiu cate inputuri vor fi.. pot anticipa insa nu si cate .

ca sa le manipulez prin request ajax cum am facut aplicatia pana acum ar trebui sa le dau un id... sau... un name, probabil, reusesc sa le dau din baza un id... insa in functia care imi controleaza inputurile nu stiu ce id e avand in vedere ca numarul de inregistrari e variabil precum si numele inputurilor respective , mentionez ca sunt numai inputuri de tip text, cu id-uri din baza de date, numarul de inregistrari fiind diferit de la zi la alta , probabil, sau de la o luna la alta ...

intrebarea ar fi.. cum as putea sa manipulez acele inputuri de tip text daca nu le stiu id-ul sau numele, exista solutie? daca stie cineva as fi recunoscator
Sus  
floorin



Data înscrierii: 29/Iun/2006
Mesaje: 210

Trimis: Mar Oct 02, 2007 2:20 pm    Titlul subiectului:  

intotdeauna exista o solutie, cand vorbim de programare. Dar da amanunte mai concrete. De ce te-ar interesa id'ul sau numele in cazul functiei? ai putea sa apelezi functia sub forma: functia_mea(this) si in interiorul ei, daca vrei sa te folosesti de valoarea din acel input ai avea functia de forma:
function functia_mea(item)
{
alert(item.value);
}
Sus  
UnTip



Data înscrierii: 03/Mai/2007
Mesaje: 377

Trimis: Mar Oct 02, 2007 2:28 pm    Titlul subiectului:  

am n inputuri generate dinamic, care au anumite valori, eu trebuie sa fac update printr-un request ajax pe acele valori, trebuie sa pot controla in functia care imi face request-ul ajax acele inputuri , eu nestiind cate inputuri sunt , id-ul si numele lor fiind generat dinamic din baza de date, adica nefiind intotdeauna acelasi...
sa zicem ca am ceva de genul

function realizeazaUpdate()
{
// verificam daca xmlHttp este liber
if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
{
//obtinem cele doua valori ale inputurilor

try{







// check the alignment on a number of cells in a table.
var table = document.getElementById("rezultateptupdate");
var inputs = table.getElementsByTagName("input");
var i;
for (i=0; i<=inputs.length;i++) {
//~ var status=inputs.length;
var nr;
nr[i]=inputs[i].type;
//~ status = cells[i].getElementsByTagName("input");
//~ var status=cells[i];
}



}catch(e){
alert(e.message);
return;
}
//alert("get");
// executam script-ul php de update trimitand cele doua numere ca paramentri prin GET
xmlHttp.open("GET", "../b4.php"?nr=" + nr , true);

//definim functia care se va ocupa de manipularea rezultatului primit de la script-ul php
xmlHttp.onreadystatechange = gestioneazaRezultatb4;

// trimitem cererea catre server
xmlHttp.send(null);
}
}


dupa cum vezi am incercat eu sa iau niste chestii cu ajutorul getElementsByTagName insa nu prea reusesc....
Sus  
Copyright



Data înscrierii: 17/Dec/2006
Mesaje: 860
Locație: Bucuresti

Trimis: Mar Oct 02, 2007 3:05 pm    Titlul subiectului:  

O solutie simpla, presupunand ca id-ul fiecarui input este id-ul inregistrarii din BD.

<input type="text" id="1" />
<input type="text" id="2" />
<input type="text" id="3" />
......................................................
......................................................

// trimiti catre server id-urile si valoarile inputurilor
var table = document.getElementById("rezultateptupdate");
var inputs = table.getElementsByTagName("input"), parameters;
for (var i = 0, n = inputs.length; i < n; i++) {
parameters += '&values[]='+inputs[i].value+'&ids[]='+inputs[i].id;
}

url = "../b4.php" + parameters.replace(/^&/, '?');
xmlHttp.open("GET", url, true);
......................................................
......................................................

//accesezi valorile pe server
if(isset($_POST)){
if(isset($_POST['values']) && isset($_POST['ids']){
for($i = 0, $n < count($_POST['values']); $i < $n; $i++){
$val = $_POST['values'][$i];
$id = $_POST['ids'][$i];
// faci update la inregistrarea cu id-ul $id
}
}
}



Later.
Sus  
UnTip



Data înscrierii: 03/Mai/2007
Mesaje: 377

Trimis: Mar Oct 02, 2007 3:45 pm    Titlul subiectului:  

nu prea am inteles care e faza cu parameters.... sunt parametrii obiectului meu?

imi status 200 si.... eroarea specifica pusa de mine daca fac ce mi-ai dat tu
am reusit sa iau id-ul ... mai trebuie sa-l parsez pentru pagina php
Sus  
floorin



Data înscrierii: 29/Iun/2006
Mesaje: 210

Trimis: Mar Oct 02, 2007 3:54 pm    Titlul subiectului:  

am inteles bine: printr-un ajax creezi niste inputuri. Printr-un alt ajax vrei sa le schimbi valoarea. Asa este?
Sus  
UnTip



Data înscrierii: 03/Mai/2007
Mesaje: 377

Trimis: Mar Oct 02, 2007 3:55 pm    Titlul subiectului:  

da.. ceva de genul... insa pana sa le schimb valoarea mai trec prin vreo 4-5 ajax-uri....
Sus  
floorin



Data înscrierii: 29/Iun/2006
Mesaje: 210

Trimis: Mar Oct 02, 2007 4:02 pm    Titlul subiectului:  

updat'area inputurilor sa se faca printr-o functie simultan la toate sau functia care realizeaza update'ul sa fie apelata la un moment dat doar pentru un singur input? (zi da pentru ultima varianta!)
Sus  
UnTip



Data înscrierii: 03/Mai/2007
Mesaje: 377

Trimis: Mar Oct 02, 2007 4:07 pm    Titlul subiectului:  

NU, sa se faca la toate update-ul, asa am gandit ca e mai normal, in cazul de eroare.. sa ii returneze rezultat erorii in div-ul respectiv....
nu prea stiu cum sa parsez variabilele get in continuare si ce e cu acel paramaters al lui cgi
Sus  
floorin



Data înscrierii: 29/Iun/2006
Mesaje: 210

Trimis: Mar Oct 02, 2007 4:33 pm    Titlul subiectului:  

tu ai un prim select din baza de date si folosind ajax creezi inputurile.
Daca am inteles corect, la un moment dat vre-i sa le modifici valoarea afisata in pagina web cu noile valori din baza de date. Ai putea sa folosesti, pentru acest refresh, ceea ce ai facut in prima faza la creearea inputurilor: rulezi acelasi select cu aceeasi parametri ciclezi dupa rezultatul intors si in interiorul ciclului schimbi valoarea inputurilor (in ideea ca selectul iti va intoarce acelasi nr.de inputuri, deci vei merge dupa indexul lor si nu dupa denumire).
Sus  
UnTip



Data înscrierii: 03/Mai/2007
Mesaje: 377

Trimis: Mar Oct 02, 2007 6:00 pm    Titlul subiectului:  

omule.... eu stiu ce trebuie sa fac si cum sa fac.. ce nu stiu este sa trimit in webservice-ul meu ajax variabilele javascript prin get catre fisierul php... si nu ca n-as sti.... insa .. sa le trimit gen array pentru php sau macar un string delimitat de semne distincte ca sa il pot "sparge" cand il duc in php
Sus  
Copyright



Data înscrierii: 17/Dec/2006
Mesaje: 860
Locație: Bucuresti

Trimis: Mar Oct 02, 2007 7:36 pm    Titlul subiectului:  

UnTip a scris: ce nu stiu este sa trimit in webservice-ul meu ajax variabilele javascript prin get catre fisierul php... si nu ca n-as sti.... insa .. sa le trimit gen array pentru php sau macar un string delimitat de semne distincte ca sa il pot "sparge" cand il duc in php Copyright a scris: for (var i = 0, n = inputs.length; i < n; i++) {
parameters += '&values[]='+inputs[i].value+'&ids[]='+inputs[i].id;
}




Later.
Sus  
UnTip



Data înscrierii: 03/Mai/2007
Mesaje: 377

Trimis: Mar Oct 02, 2007 8:12 pm    Titlul subiectului:  

for (var i = 0, n = inputs.length; i < n; i++) {
parameters += '&values[]='+inputs[i].value+'&ids[]='+inputs[i].id;
}
chestia asta
nu am inteles-o ce e parameters cand il initializezi ca si variabila din cate am vazut eu ai facut ceva de genu... ,parameters.... eu unu nu am vazut sintaxa asta never....+ ca imi da un undefined.... si daca il fac dupa metoda ta cu variabila url.... ma trimite in status 200 not found
Sus  
adix



Data înscrierii: 02/Oct/2007
Mesaje: 123

Trimis: Mie Oct 03, 2007 7:00 am    Titlul subiectului:  

Solutia e foarte simpla.
Pui o clasa pe fiecare input, dar aceeasi. Ma refer la o clasa CSS.

Apoi, dupa ce ai incarcat inputurile in DIV-ul tau, scanezi in div toate elementele care au clasa css respectiva.

www(.)dustindiaz(.)com/getelementsbyclass/

O sa iti dea tot ce ai nevoie.
Functia iti returneaza un vector cu referinte la fiecare obiect dintr-un anumit container, obiecte ce au toate o aceeasi clasa CSS predefinita.
Sus  
Copyright



Data înscrierii: 17/Dec/2006
Mesaje: 860
Locație: Bucuresti

Trimis: Mie Oct 03, 2007 7:40 am    Titlul subiectului:  

UnTip a scris: ce e parameters cand il initializezi ca si variabila din cate am vazut eu ai facut ceva de genu... ,parameters.... eu unu nu am vazut sintaxa asta never....+ ca imi da un undefined....

parameters este o variabila in care incarci toti parametrii (id-urile si valorile elementelor input) care vrei sa fie trimise catre server, si am declarat-o dupa inputs pentru a nu fi evaluata in interiorul buclei for ca variabila globala sau nedefinita.

var inputs = table.getElementsByTagName("input"), parameters;

este aceelasi lucru cu:

var inputs = table.getElementsByTagName("input");
var parameters;

In afara de faptul ca am folosit POST pe server cand de fapt datele sunt trimise prin GET(lucru deloc recomandat atunci cand ai de trimis spre server o cantitate foarte mare de date), codul postat de mine ar trebui sa functioneze perfect.
UnTip a scris: for (var i = 0, n = inputs.length; i < n; i++) {
parameters += '&values[]='+inputs[i].value+'&ids[]='+inputs[i].id;
}
chestia asta nu am inteles-o

Pai, e foarte simplu. In for-ul respectiv sunt parcurse toate elementele input din tabel si este creata lista de parametrii care va fi trimisa prin request-ul Ajax, care pentru a grupa valorile si id-urile input-urilor in doua array-uri separate ar trebui sa arate cam asa:

../b4.php?values[]=valoare_input1&ids[]=1&values[]=valoare_input2&ids[]=2&values[]=valoare_input3&ids[]=3

Acum, daca o sa dai un print_r($_GET) la inceputul pagini php catre care faci request-ul Ajax, ar trebui sa vezi ceva de genu asta:

Array(values = Array([0]=>valoare_input1, [1]=>valoare_input2, [2]=>valoare_input3), ids = Array([0]=>1,[1]=>2,[2]=>3))



Later.
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> AJAX Du-te la pagina 1, 2  Următoare
Pagina 1 din 2


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community