Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX]]Wywołanie funkcji po zakończeniu działania
Forum PHP.pl > Forum > XML, AJAX
SN@JPER^
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?
zenon13
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.
SN@JPER^
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.
zenon13
Wygląda, że powinno działać
A tą funkcję to wywołujesz oczywiście z wnętrza if (ObiektXMLHttp.readyState == 4)
SN@JPER^
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. }

zenon13
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?
SN@JPER^
pobierz_produkty działa - zresztą jest ładowany przy starcie strony(onload). Testowałem tą funkcje równiez poprzez wciśnięcie buttona.
zenon13
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
SN@JPER^
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. }
zenon13
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.
SN@JPER^
Konsola błędów Firefoxa:

zenon13
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
SN@JPER^
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.