Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX]]Wywołanie funkcji po zakończeniu działania
SN@JPER^
post 25.03.2010, 14:54:31
Post #1





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Witam,

wyskrobałem coś takiego:


  1. if (window.XMLHttpRequest)
  2. {
  3. ObiektXMLHttp = new XMLHttpRequest();}
  4. else if (window.ActiveXObject)
  5. {
  6. ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");}
  7.  
  8.  
  9.  
  10. function pobierz_produkty() {
  11. if(ObiektXMLHttp)
  12. {
  13. var cel = document.getElementById('pop');
  14.  
  15. ObiektXMLHttp.open("GET", 'ajax.php?action=pobierz_produkty');
  16. ObiektXMLHttp.send(null);
  17. ObiektXMLHttp.overrideMimeType('text/html; charset=ISO-8859-2');
  18.  
  19. ObiektXMLHttp.onreadystatechange = function()
  20. {
  21. if (ObiektXMLHttp.readyState == 4)
  22. {
  23.  
  24. cel.innerHTML = ObiektXMLHttp.responseText;
  25. }
  26. }
  27.  
  28.  
  29.  
  30. }
  31.  
  32.  
  33. }
  34.  
  35.  
  36.  
  37. // druga część kodu
  38. function dodaj_produkt(id) {
  39. if(ObiektXMLHttp)
  40. {
  41. var cel = document.getElementById('ZIOM');
  42. var myDiv = document.getElementById('input_' + id).value;
  43. var myDiv1 = document.getElementById('ids_' + id).innerHTML;
  44.  
  45. ObiektXMLHttp.open("GET", 'ajax.php?action=dodaj_produkt&input=' + myDiv + '&id=' + myDiv1);
  46. ObiektXMLHttp.send(null);
  47. ObiektXMLHttp.overrideMimeType('text/html; charset=ISO-8859-2');
  48.  
  49. ObiektXMLHttp.onreadystatechange = function()
  50. {
  51. if (ObiektXMLHttp.readyState == 4)
  52. {
  53. cel.innerHTML = ObiektXMLHttp.responseText;
  54.  
  55. }
  56. }
  57.  
  58.  
  59.  
  60. }
  61.  
  62.  
  63.  
  64.  
  65. }



Jak zrobić, aby pobierz_produkty wykonywały się, gdy dodaj_produkt zrobi swoje działanie?
Go to the top of the page
+Quote Post
zenon13
post 25.03.2010, 15:47:59
Post #2





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 1.03.2010

Ostrzeżenie: (0%)
-----


Jeśli wszystko ma się wykonać "ciurkiem" to po co dwie funkcje - wszystko można jak rozumiem wsadzić do jednego PHP.
Natomiast odpowiadając wprost to po prostu trzeba tą funkcję wywołać - tak to jest z funkcjami.
Go to the top of the page
+Quote Post
SN@JPER^
post 25.03.2010, 16:04:51
Post #3





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


zenon13, funkcja dodaj_produkt, wykonywana jest poprzez popup. Po dodaniu produktu, chce by zzaktualizowało(pobrało) na stronie produkty bez przeladowania.

Wywoływałem funkcje pobierz_produkty na końcu funkcji dodaj_produkt, nie działa.
Go to the top of the page
+Quote Post
zenon13
post 25.03.2010, 16:53:55
Post #4





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 1.03.2010

Ostrzeżenie: (0%)
-----


Wygląda, że powinno działać
A tą funkcję to wywołujesz oczywiście z wnętrza if (ObiektXMLHttp.readyState == 4)
Go to the top of the page
+Quote Post
SN@JPER^
post 25.03.2010, 18:28:17
Post #5





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Napisałem, że na końcu funkcji dodaj_produkt. Czyli dać pomiędzy

if (ObiektXMLHttp.readyState == 4) ?

Nie działa, nawet napisałem wszystko na nowo i nic

  1. var ajax_method = typeof XMLHttpRequest == "undefined"?new ActiveXObject('Microsoft.XMLHttp'):new XMLHttpRequest();
  2.  
  3.  
  4. function synchronizuj(params) {
  5. myDivs = document.getElementById("pop");
  6. myDivs.innerHTML = params;
  7. }
  8.  
  9. function pobierz_produkty() {
  10.  
  11.  
  12.  
  13. ajax_method.onreadystatechange = function(){
  14. if (ajax_method.readyState == 4 && ajax_method.status == 200) {
  15.  
  16. synchronizuj(ajax_method.responseText);
  17.  
  18. }
  19. };
  20. ajax_method.open("GET", 'ajax.php?action=pobierz_produkty');
  21. ajax_method.send(null);
  22.  
  23.  
  24. }
  25.  
  26.  
  27. function dodaj_produkt(id) {
  28.  
  29. var myDiv = document.getElementById('input_' + id).value;
  30. var myDiv1 = document.getElementById('ids_' + id).innerHTML;
  31.  
  32. ajax_method.onreadystatechange = function(){
  33. if (ajax_method.readyState == 4 && ajax_method.status == 200) {
  34.  
  35. synchronizuj(ajax_method.responseText);
  36. pobierz_produkty();
  37.  
  38. }
  39. };
  40. ajax_method.open("GET", 'ajax.php?action=dodaj_produkt&input=' + myDiv + '&id=' + myDiv1);
  41. ajax_method.send(null);
  42.  
  43. window.close();
  44. }

Go to the top of the page
+Quote Post
zenon13
post 25.03.2010, 18:54:10
Post #6





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 1.03.2010

Ostrzeżenie: (0%)
-----


A czy pobierz_produkty() działa? tzn. czy wpisuje coś w diva "na początek" tj. wywołana z innego miejsca ?
Jeszcze coś, korzystasz z właściwości responseText a ten PHP to w jakim formacie zwraca te produkty?
Go to the top of the page
+Quote Post
SN@JPER^
post 25.03.2010, 19:05:21
Post #7





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


pobierz_produkty działa - zresztą jest ładowany przy starcie strony(onload). Testowałem tą funkcje równiez poprzez wciśnięcie buttona.

Ten post edytował SN@JPER^ 25.03.2010, 19:06:16
Go to the top of the page
+Quote Post
zenon13
post 25.03.2010, 19:36:05
Post #8





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 1.03.2010

Ostrzeżenie: (0%)
-----


No to idźmy dalej. Czy resonseText w funkcji dodaj_produkt coś zwraca? Pytam bo może problem jest w PHP?

Sorry, że w ten sposób ale mi w tym kodzie, który dałeś wszystko gra
Go to the top of the page
+Quote Post
SN@JPER^
post 25.03.2010, 19:42:31
Post #9





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Zwraca - tekst GOOD.

  1. function dodaj_produkt(){
  2. global $id_dieta;
  3. $sql = 'INSERT INTO dieta_potrawy SET id_diety="'.$id_dieta.'", id_produktu="'.$_GET['id'].'", waga="'.$_GET['input'].'"';
  4. $query = mysql_query($sql);
  5.  
  6. if($query){
  7. echo 'GOOD';
  8. }
  9. }


Ten post edytował SN@JPER^ 25.03.2010, 19:44:11
Go to the top of the page
+Quote Post
zenon13
post 25.03.2010, 20:01:30
Post #10





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 1.03.2010

Ostrzeżenie: (0%)
-----


Zwraca skrypt PHP ale czy Ty odczytujesz go po stronie JS? Albo jeszcze inaczej czy następuje poprawny wpis do bazy?
Jeśli tak to ja się poddaję.
Jedyne co mogę jeszcze podpowiedzieć to debugger. Napisz w którym miejscu się sypie.
Go to the top of the page
+Quote Post
SN@JPER^
post 25.03.2010, 20:14:42
Post #11





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Konsola błędów Firefoxa:

Go to the top of the page
+Quote Post
zenon13
post 25.03.2010, 20:47:00
Post #12





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 1.03.2010

Ostrzeżenie: (0%)
-----


Mój ostatni typ
Spróbuj nie odwoływać się bezpośrednio do pobierz_produkty() tylko napisz oddzielną funkcyjkę, która ją wywoła.
Choć przyznaję, że to dość rozpaczliwe
Go to the top of the page
+Quote Post
SN@JPER^
post 25.03.2010, 22:22:43
Post #13





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


Znalazłem problem, funkcja pobierz_produkty wywoływana była przez dodaj_produkt(), która jest na innej podstronie(produkty.php), a pobierz_produkty(); na dieta.php.

Da się jakoś zrobić, by wywołać funkcje i ta zadzialalaby na innej podstronie? - Do popupa mi to potrzebne.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 31.07.2025 - 07:49