Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dwukrotne wywołanie funkcji java script przez AJAX dp PHP
Forum PHP.pl > Forum > XML, AJAX
fiasko
  1. <head>
  2. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  3. <meta name="robots" content="noindex, nofollow" />
  4. <title></title>
  5. <script type="text/javascript" src="../jq/ajax.js"></script>
  6.  
  7. <?php
  8. <script type=\"text/javascript\">
  9.  
  10.  
  11. var ajax = new sack();
  12. var podkatid = '".$_POST[podkatname]."';
  13. function getpodkatlist(sel)
  14. {
  15. if (typeof(sel)== 'string' ) {
  16. var katid = sel;
  17. }
  18. else {
  19. var katid = sel.options[sel.selectedIndex].value;
  20. }
  21.  
  22. document.getElementById('podkatname').options.length = 0 ; select box
  23. if(katid.length>0){
  24. ajax.requestFile = 'getpodkat.php?podd=".$_POST[podkatname]."&katid='+katid;
  25. ajax.onCompletion = createpodkat;
  26. ajax.runAJAX();
  27. }
  28. }
  29.  
  30. function createpodkat()
  31. {
  32. var obj = document.getElementById('podkatname');
  33. eval(ajax.response);
  34. }
  35.  
  36.  
  37.  
  38. echo "
  39.  
  40. function getpodkatlist2(sel)
  41. {
  42. if (typeof(sel)== 'string' ) {
  43. var katid = sel;
  44. }
  45. else {
  46. var katid = sel.options[sel.selectedIndex].value;
  47. }
  48.  
  49. document.getElementById('podkatname').options.length = 0 ; select box
  50. if(katid.length>0){
  51. ajax.requestFile = 'getpodkat.php?podd=".$_POST[podkatname]."&katid='+katid;
  52. ajax.onCompletion = createpodkat;
  53. ajax.runAJAX();
  54. }
  55. }
  56.  
  57. function createpodkat()
  58. {
  59. var obj = document.getElementById('podkatname');
  60. eval(ajax.response);
  61. }
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68. </script>
  69. ";
  70. ?>
  71. </head>




w Body wywołuję tak:

<body onload="getpodkatlist1(40)" ; onload="getpodkatlist2(23)">


wywołuje mi się tylko jedna z nich ale dwóch na raz nie mogę wywołać .

Dorwałem wtedy w necie kolejną funkcję do wywoływania dwóch funkcji javascript .


function onLoadHandler(init_fxn)
{
var old_init = window.onload;
var new_init = init_fxn;
window.onload = function(){
if (typeof(old_init)=="function")
{
old_init;
}
new_init;
}
return this;
}

</script>

i próbowałem to wywołać tak:

<script type="text/javascript">
new onLoadHandler(getpodkatlist('21'));
new onLoadHandler(getpodkatlist2('40'));
</script>

Gdy wywołuję powyższym handlerkiem funkcję getpodkatlist('21') lub getpodkatlist2('21') to żadna z nich nie działa. Jak wywoływałem je w Body przez onload to chociaż jedna zawsze się ładowała.

Gdy wywołuję handlerkiem testową funkcję np. jedną funkcją wołanie alertu, a drugą funkcją np. documet.write() to wszystko działa pięknie.

No i teraz sądzę, że problem jest gdzieś w ajax. Tylko nie za bardzo mam pomysł jak wywołać ajax 2 razy albo żeby odpytał plik .php ,a ajax.requestFile odebrał wynik i go zwrócił po czym żeby zrobił to samo na rzecz kolejnego obiektu tą samą metodą.

ajax.requestFile - może tu jest gdzieś problem?

na pytanie do czego jest ta funkcja odpowiadam - a no do wywoływania kategorii, a potem podkategorii z opcją zapamiętywania wyboru po wysłaniu formularza .Chcę żeby funkcja onload zwrócila mi zapamiętany wynik w opcji wyboru
  1. <?php
  2. echo "<pre>";
  3. print_r($_POST);
  4. echo "</pre><br>";
  5. $kat = mysql_query("select * from ".$prefix."kategorie where akt=1 ");
  6.  
  7. ?>
  8.  
  9.  
  10.  
  11. działa na rzecz tego skryptu.
  12.  
  13. <form action="zapajax.php" method="post">
  14. <table>
  15. <tr>
  16. <td>Kategorie </td>
  17. <td><select id="katname" name="katname" onchange="getpodkatlist(this)" >
  18. <option value="0" >Wybierz kategorię</option>
  19.  
  20. <?php
  21. while($tabkat=mysql_fetch_assoc($kat)){
  22. if($_POST[katname] == $tabkat[id]){
  23. $zaz = 'selected="selected"';
  24. }
  25. else {
  26. $zaz = '';
  27. }
  28. echo '
  29. <option value="'.$tabkat[id].'" '.$zaz.'>'.$tabkat[nazwa].'</option>
  30. ';
  31. }
  32.  
  33.  
  34.  
  35. ?>
  36.  
  37.  
  38. </select>
  39. </td>
  40. </tr>
  41. <tr>
  42. <td>Podkategorie: </td>
  43. <td><select id="podkatname" name="podkatname">
  44. <option value="0" >Wybierz najpierw kategorię</option>
  45. </select>
  46. </td>
  47. </tr>
  48. <tr>
  49. <td></td>
  50. <td>
  51. <input type="submit" name"zapisz" value="wyślij" >
  52. </td>
  53. </tr>
  54.  
  55. </table>
  56. </form>


Ajax wywołuję ten plik getpodkat.php

  1. <?php
  2.  
  3. if(isset($_GET['katid'])) {
  4.  
  5. include("../include/config.php");
  6. include("../include/conector.php");
  7.  
  8.  
  9. $podkat = mysql_query("select * from ".$prefix."podkategorie where id_kat= '".mysql_real_escape_string($_GET['katid'])."'");
  10. if ($_GET['katid'] == 0 ) {
  11. $op_podkat = iconv('ISO-8859-2', 'UTF-8', 'Wybierz podkategorię');
  12. echo "obj.options[obj.options.length] = new Option('".$op_podkat."','0');
  13. ";}
  14.  
  15. while($tabpodkat=mysql_fetch_assoc($podkat))
  16. {
  17. if ($tabpodkat[id] == $_GET['podd'] )
  18. {
  19. $selected = 'seleted=\"selected\"';
  20. }
  21.  
  22. $tabpodkat[nazwa] = iconv('ISO-8859-2', 'UTF-8', $tabpodkat[nazwa]);
  23. echo "obj.options[obj.options.length] = new Option('".$tabpodkat[nazwa]."','".$tabpodkat[id]."' , '".$selected."');
  24. ";
  25. $selected = '';
  26. }
  27.  
  28. }
  29. ?>


Na pytanie po co wywołuje tą funkcję dwa razy - odpowiadam bo chcę dać do wyboru użytkownikom dopisania się do kilku kategorii w katalogu.
#luq
Cytat
Kod
<body onload="getpodkatlist1(40)"; onload="getpodkatlist2(23)">


sciana.gif Dlaczego tak!?
fiasko
Cytat
Cytat
Kod
<body onload="getpodkatlist1(40)"; onload="getpodkatlist2(23)">


Dlaczego tak!?



Aj no bo tak też nie działało do końca poprawnie. W jednym i w drugim przypadku była wywołana tylko jedna funkcja.

  1. <body onload="getpodkatlist1(40) ; getpodkatlist2(23)">


Chwytałem się każdego pomysła guitar.gif Po za tym jeszcze zbyt słabo znam javascript
nospor
a po czym stwierdzasz ze wykonuje się tylko raz?
fiasko
Bo nie dostaje wyników z drugiej listy rozwijalnej wywołując zdarzenie onload. Gdy natomiast używam zdarzenia onchange="getpodkatlist(this)" onchange="getpodkatlist2(this)" zarówno w jednym jak i w drugim przypadku lista rozwijalna subkategorii się ładuje. Do zmiennej kadid wędruje id kategorii. kadid może myć załadowana na dwa sposoby - poprzez zdarzenie onload i wtedy dostaje od razu id kategorii lub też po przez onchange i wtedy id jest wyłuskane z obiektu. Mogę też wywołać każdą funkcję pojedyńczo po przez zdarzenie onload i też śmiga. Dlatego sądzę że jest problem z wywołaniem dwóch funkcji na raz.



nospor
Moze obie funkcji piszą do tego samego miejsca i łądując dwie naraz jedna nadpisuje drugą smile.gif
fiasko
Obie funkcje korzystają z tego samego pliku. Ale moim zdaniem nie powinno mieć to znaczenia. Każda z nich odbiera swoje wyniki bo ma inne wartości wsadowe . Gdyby nadpisywała działanie poprzedniej to w jednej i w drugiej załadowałoby się chociaż to samo. Robiłem testy na to wywołując w jednej i w drigiej te same kategorie z tym samym id. Tak wiec powinny się załadować obydwie gdyby nadpisywała któraś. A tak nie jest.

Wydaje mi się że to Ajax jest wywoływany tylko raz. bo funkcje działają ok.

Problem zaczyna się tu

  1. ajax.requestFile = 'getpodkat.php?podd=".$_POST[podkatname]."&katid='+katid;


Nie ma jakiegoś sposobu aby zdarzenia wywołać po kolei podczas wczytywania ? Najpierw jedna funkcja potem druga.


Sądzę, że trzeba zrobić to tak :
określić czy Ajax zwrócił wynik poprawnie po czym wywołać kolejną funkcję wewnątrz poprzedniej. Spróbuję coś wydziergać.
nospor
Nie mowie o nadpisywaniu wewnatrz funkcji a o nadpisywaniu juz po wywolaniu. Funkcje generują jakiś kod js a on zapewne gdzies pisze swoje wyniki. Jesli piszesz w to samo miejsce to się nadpisze.

Ale nie ma co gdybać - zainstaluj sobie FireBuga dla FireFox i wszystko będziesz widział.
fiasko
Mam to. Ale nie widać tam wszystkiego po wywołaniu.

Zaraz napisze sobie testowe funkcje i sprawdzę co tam się dzieje.

Zaraz napisze sobie testowe funkcje i sprawdzę co tam się dzieje.
nospor
wchodzisz w konsole FireBug i widzisz wszystkie żądania ajax. Jesli zobaczysz tylko jedno to faktycznie dwa na raz ci nie dzialają smile.gif
Jesli zobaczysz dwa..... winksmiley.jpg
fiasko
Tak wygląda cały kod:

  1. <?php
  2. include("../include/config.php");
  3. include("../include/conector.php");
  4.  
  5. ?>
  6.  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  8. <html>
  9. <head>
  10. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  11. <meta name="robots" content="noindex, nofollow" />
  12. <title></title>
  13. <script type="text/javascript" src="../jq/ajax.js"></script>
  14.  
  15. <?php
  16. <script type=\"text/javascript\">
  17.  
  18.  
  19. var ajax = new sack();
  20. var podkatid = '".$_POST[podkatname]."';
  21. function getpodkatlist(sel)
  22. {
  23. if (typeof(sel)== 'string' ) {
  24. var katid = sel;
  25. }
  26. else {
  27. var katid = sel.options[sel.selectedIndex].value;
  28. }
  29.  
  30. document.getElementById('podkatname').options.length = 0 ;
  31. if(katid.length>0){
  32. ajax.requestFile = 'getpodkat.php?podd=".$_POST[podkatname]."&katid='+katid;
  33. ajax.onCompletion = createpodkat;
  34. ajax.runAJAX();
  35. }
  36. }
  37.  
  38. function createpodkat()
  39. {
  40. var obj = document.getElementById('podkatname');
  41. eval(ajax.response);
  42. }
  43.  
  44.  
  45.  
  46. function getpodkatlist3(sel)
  47. {
  48. if (typeof(sel)== 'string' ) {
  49. var katid = sel;
  50. }
  51. else {
  52. var katid = sel.options[sel.selectedIndex].value;
  53. }
  54.  
  55. document.getElementById('podkatname3').options.length = 0 ;
  56. if(katid.length>0){
  57. ajax.requestFile = 'getpodkat.php?podd=".$_POST[podkatname3]."&katid='+katid;
  58. ajax.onCompletion = createpodkat3;
  59. ajax.runAJAX();
  60. }
  61. }
  62.  
  63. function createpodkat3()
  64. {
  65. var obj = document.getElementById('podkatname3');
  66. eval(ajax.response);
  67. }
  68.  
  69.  
  70.  
  71.  
  72. </script>
  73. ";
  74. ?>
  75. </head>
  76.  
  77.  
  78. <?php
  79. if ( (!empty($_POST[katname])) || (!empty($_POST[katname3])) ){
  80. <body onload=\" getpodkatlist('".$_POST[katname]."') ; getpodkatlist3('".$_POST[katname3]."') \">
  81. ";
  82.  
  83.  
  84. }
  85. else {
  86. echo "<body>";
  87. }
  88.  
  89. ?>
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96. <?php
  97. echo "<pre>";
  98. print_r($_POST);
  99. echo "</pre><br>";
  100. $kat = mysql_query("select * from ".$prefix."kategorie where akt=1 ");
  101.  
  102. ?>
  103.  
  104.  
  105.  
  106.  
  107.  
  108. <form action="zapajaxdwa.php" method="post">
  109. <table>
  110. <tr>
  111. <td>Kategorie </td>
  112. <td><select id="katname" name="katname" onchange="getpodkatlist(this)" >
  113. <option value="0" >Wybierz kategorię</option>
  114.  
  115. <?php
  116. while($tabkat=mysql_fetch_assoc($kat)){
  117. if($_POST[katname] == $tabkat[id]){
  118. $zaz = 'selected="selected"';
  119. }
  120. else {
  121. $zaz = '';
  122. }
  123. echo '
  124. <option value="'.$tabkat[id].'" '.$zaz.'>'.$tabkat[nazwa].'</option>
  125. ';
  126. }
  127.  
  128.  
  129.  
  130. ?>
  131.  
  132.  
  133. </select>
  134. </td>
  135. </tr>
  136. <tr>
  137. <td>Podkategorie: </td>
  138. <td><select id="podkatname" name="podkatname">
  139. <option value="0" >Wybierz najpierw kategorię</option>
  140. </select>
  141. </td>
  142. </tr>
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150. <tr>
  151. <td>Kategorie 3</td>
  152. <td><select id="katname3" name="katname3" onchange="getpodkatlist3(this)" >
  153. <option value="0" >Wybierz kategorię</option>
  154.  
  155. <?php
  156. $kat3 = mysql_query("select * from ".$prefix."kategorie where akt=1 ");
  157. while($tabkat3=mysql_fetch_assoc($kat3)){
  158. if($_POST[katname3] == $tabkat3[id]){
  159. $zaz3 = 'selected="selected"';
  160. }
  161. else {
  162. $zaz3 = '';
  163. }
  164. echo '
  165. <option value="'.$tabkat3[id].'" '.$zaz3.'>'.$tabkat3[nazwa].'</option>
  166. ';
  167. }
  168.  
  169.  
  170.  
  171. ?>
  172.  
  173.  
  174. </select>
  175. </td>
  176. </tr>
  177. <tr>
  178. <td>Podkategorie3: </td>
  179. <td><select id="podkatname3" name="podkatname3">
  180. <option value="0" >Wybierz najpierw kategorię3</option>
  181. </select>
  182. </td>
  183. </tr>
  184.  
  185.  
  186. <tr>
  187. <td></td>
  188. <td>
  189. <input type="submit" name"zapisz" value="wyślij" >
  190. </td>
  191. </tr>
  192.  
  193.  
  194.  
  195. </table>
  196. </form>
  197.  
  198.  
  199.  
  200.  
  201.  
  202. </body>
  203. </html>
  204.  


No to już wiem że problem tyczy się ajax. Trzeba to wywołać pokolei - jakieś pomysły ?

Zrobiłem kolejne zmiany. Teraz wywołuję funkcję po tym jak wywoła się funkcja pierwsza :


  1. <?php
  2. include("../include/config.php");
  3. include("../include/conector.php");
  4.  
  5. ?>
  6.  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  8. <html>
  9. <head>
  10. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  11. <meta name="robots" content="noindex, nofollow" />
  12. <title></title>
  13. <script type="text/javascript" src="../jq/ajax.js"></script>
  14.  
  15. <?php
  16. <script type=\"text/javascript\">
  17.  
  18.  
  19. var ajax = new sack();
  20. var podkatid = '".$_POST[podkatname]."';
  21. function getpodkatlist(sel)
  22. {
  23. if (typeof(sel)== 'string' ) {
  24. var katid = sel;
  25. }
  26. else {
  27. var katid = sel.options[sel.selectedIndex].value;
  28. }
  29.  
  30. document.getElementById('podkatname').options.length = 0 ;
  31. if(katid.length>0){
  32. ajax.requestFile = 'getpodkat.php?podd=".$_POST[podkatname]."&katid='+katid;
  33. ajax.onCompletion = createpodkat;
  34. ajax.runAJAX();
  35. }
  36. }
  37.  
  38. function createpodkat()
  39. {
  40. var obj = document.getElementById('podkatname');
  41. eval(ajax.response);
  42. getpodkatlist3('".$_POST[katname3]."');
  43. }
  44.  
  45.  
  46.  
  47.  
  48. function getpodkatlist3(sel)
  49. {
  50. if (typeof(sel)== 'string' ) {
  51. var katid = sel;
  52. }
  53. else {
  54. var katid = sel.options[sel.selectedIndex].value;
  55. }
  56.  
  57. document.getElementById('podkatname3').options.length = 0 ;
  58. if(katid.length>0){
  59. ajax.requestFile = 'getpodkat.php?podd=".$_POST[podkatname3]."&katid='+katid;
  60. ajax.onCompletion = createpodkat3;
  61. ajax.runAJAX();
  62. }
  63. }
  64.  
  65. function createpodkat3()
  66. {
  67. var obj = document.getElementById('podkatname3');
  68. eval(ajax.response);
  69.  
  70. }
  71.  
  72.  
  73.  
  74.  
  75. </script>
  76. ";
  77. ?>
  78. </head>
  79.  
  80.  
  81. <?php
  82. if ( (!empty($_POST[katname])) || (!empty($_POST[katname3])) ){
  83. <body onload=\" getpodkatlist('".$_POST[katname]."') ; \">
  84. ";
  85.  
  86.  
  87. }
  88. else {
  89. echo "<body>";
  90. }
  91.  
  92. ?>
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99. <?php
  100. echo "<pre>";
  101. print_r($_POST);
  102. echo "</pre><br>";
  103. $kat = mysql_query("select * from ".$prefix."kategorie where akt=1 ");
  104.  
  105. ?>
  106.  
  107.  
  108.  
  109.  
  110.  
  111. <form action="zapajaxdwa.php" method="post">
  112. <table>
  113. <tr>
  114. <td>Kategorie </td>
  115. <td><select id="katname" name="katname" onchange="getpodkatlist(this)" >
  116. <option value="0" >Wybierz kategorię</option>
  117.  
  118. <?php
  119. while($tabkat=mysql_fetch_assoc($kat)){
  120. if($_POST[katname] == $tabkat[id]){
  121. $zaz = 'selected="selected"';
  122. }
  123. else {
  124. $zaz = '';
  125. }
  126. echo '
  127. <option value="'.$tabkat[id].'" '.$zaz.'>'.$tabkat[nazwa].'</option>
  128. ';
  129. }
  130.  
  131.  
  132.  
  133. ?>
  134.  
  135.  
  136. </select>
  137. </td>
  138. </tr>
  139. <tr>
  140. <td>Podkategorie: </td>
  141. <td><select id="podkatname" name="podkatname">
  142. <option value="0" >Wybierz najpierw kategorię</option>
  143. </select>
  144. </td>
  145. </tr>
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153. <tr>
  154. <td>Kategorie 3</td>
  155. <td><select id="katname3" name="katname3" onchange="getpodkatlist3(this)" >
  156. <option value="0" >Wybierz kategorię</option>
  157.  
  158. <?php
  159. $kat3 = mysql_query("select * from ".$prefix."kategorie where akt=1 ");
  160. while($tabkat3=mysql_fetch_assoc($kat3)){
  161. if($_POST[katname3] == $tabkat3[id]){
  162. $zaz3 = 'selected="selected"';
  163. }
  164. else {
  165. $zaz3 = '';
  166. }
  167. echo '
  168. <option value="'.$tabkat3[id].'" '.$zaz3.'>'.$tabkat3[nazwa].'</option>
  169. ';
  170. }
  171.  
  172.  
  173.  
  174. ?>
  175.  
  176.  
  177. </select>
  178. </td>
  179. </tr>
  180. <tr>
  181. <td>Podkategorie3: </td>
  182. <td><select id="podkatname3" name="podkatname3">
  183. <option value="0" >Wybierz najpierw kategorię3</option>
  184. </select>
  185. </td>
  186. </tr>
  187.  
  188.  
  189. <tr>
  190. <td></td>
  191. <td>
  192. <input type="submit" name"zapisz" value="wyślij" >
  193. </td>
  194. </tr>
  195.  
  196.  
  197.  
  198. </table>
  199. </form>
  200.  
  201.  
  202.  
  203.  
  204.  
  205. </body>
  206. </html>
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.