Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak uruchomić javascrypt po przeslaniu kodu w AJAX ?, Run JavaScript after AJAX load
kojocik76
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.06.2010

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


Witam,
Przejrzałem kilka wątków w tym temacie ale nic sensownego nie znalazłem, może ktoś z grupowiczów mi pomoże .... ?

Otóż mam taki problem:
1.skrypt.php który generuje mi kod html+javascript - działa wywołany bezpośrednio
np.
  1. echo 'kod html';
  2. echo '<script>kod javascript </script>';
  3. echo 'kod html';


2. natomiast jeśli przepuszczam go przez AJAX - już nie !

  1. ...
  2. object.open("POST", "skrypt.php",true);
  3. ....
  4. if (object.readyState == 4 && object.status == 200) {
  5. obj_div.innerHTML= object.responseText;
  6.  
  7. /*
  8. //use eval
  9. var ob = obj_div.getElementsByTagName("script");
  10. for(var i=0; i<ob.length-1; i++){
  11. if(ob[i+1].text!=null) eval(ob[i+1].text);
  12. }
  13. */
  14.  
  15. }
  16.  
  17.  
  18. ....
  19. <div id="obj_div">
  20.  
  21. </div>
  22. ...



3. jesli w pliku skrypt.php mam np. <script> alert('tekst'); </script> - to eval działa, ale jesli np chciałbym już coś wyświetlić w odpowiednim miejscu kodu html generowanego w tym skrypcie to już nie daje rady (IMG:style_emoticons/default/sad.gif)

Czy ktoś z szanownych grupowiczów przyjdzie mi z pomocą ? Może jest jakaś inna ścieżka na rozwiązanie tego problemu ? POMOCY !

pozdr,
AdamP
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jakbyś użył jQuery to byś nie miał problemu (IMG:style_emoticons/default/smile.gif)
jQuery z automatu przetwarza kod js
Go to the top of the page
+Quote Post
croc
post
Post #3





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Ajax służy do pobierania danych, a nie do pobierania kodu JS. Oczywiście, można i tak, ale to nie jest najlepszy pomysł. Napisz co chcesz osiągnąć - na pewno można to zrobić w lepszy (bezpieczny) sposób.
Go to the top of the page
+Quote Post
kojocik76
post
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.06.2010

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


Dzięki wielkie za szybką odpowiedź (IMG:style_emoticons/default/smile.gif)

Przerobiłem kod do jQuery - fakt, szybko, miło i sprawnie ...niestety utknąłem w tym samym miejscu. A o to przykład: (później opiszę do czego mi to potrzebne, być może faktycznie powinienem isć inną drogą rozumowania?)

1. plik z ajaxem:

  1. <script type="text/javascript" src="calendar.js"></script>
  2. </head>
  3. ....
  4. function formget1(url, divobj, form)
  5. {
  6. var parameters = pobierzWartForm(form);
  7. jQuery.ajax({
  8. type: "POST",
  9. url: url,
  10. dataType: 'html',
  11. data: parameters,
  12. success: function(html_out) {
  13. $('#div1').html(html_out);
  14. }
  15. });
  16. }
  17. ......
  18.  
  19. echo '<div id="div1">
  20. <form name="form1" id="form1" action="1.php" method="post" >
  21.  
  22. <select name="s1" id="s1" onchange="formget1(\'2.php\',\'div1\',\'form1\');" style="width:160;">
  23. <option value="0" selected="selected">aaaa</option>
  24. <option value="2" >bbbb</option>
  25. </select>
  26. <script>
  27. DateInput("k15", true, "YYYY-MM-DD", "2010-06-25");
  28. </script>
  29. <input type=submit tabindex="102" value="test" name="submit">
  30. </form>';


oraz kod z pliku wywoływanego przez jQuery (ajax) ....(akurat w tym przypadku echo z pierwszego i drugiego pliku niczym się nie różni ale w założeniu ma być i to znacznie)

  1.  
  2. echo '<div id="div1">
  3. <form name="form1" id="form1" action="1.php" method="post" >
  4.  
  5. <select name="s1" id="s1" onchange="formget1(\'2.php\',\'div1\',\'form1\');" style="width:160;">
  6. <option value="0" selected="selected">aaaa</option>
  7. <option value="2" >bbbb</option>
  8. </select>
  9. <script>
  10. DateInput("k15", true, "YYYY-MM-DD", "2010-06-25");
  11. </script>
  12. <input type=submit tabindex="102" value="test" name="submit">
  13. </form>';
  14.  


OK.
to był przykład który jeśli by mi zadziałał byłbym już w domu. A teraz pokrótce opiszę co chciałbym uzyskać.
Otóż mój kod php generuje formularz na podstawie konfiguracji zapisanej w bazie.Kilka typów kontrolek może wywoływać podscenariusze formularza głównego w zależności od konfiguracji i aktualnych danych. Efekt docelowy który chcę/muszę uzyskać to aby po zmianie wartości kontrolki x odrysować nowy formularz wraz z podscenariuszem wywołanym przez tą kontrolkę bez odświeżania strony.Czyli plik php wywolany przez ajax'a ma za zadanie stworzyć nową wersję scenariusza wysyłając echo 'kod html';. Wszystko działa pięknie jeśli mam standardowe kontrolki, ele wykorzystuję w formularzu dwie dodatkowe (gotowce javascript), które po przeładowaniu przez ajax już nie działają (IMG:style_emoticons/default/sad.gif) . przykład powyżej.
Problem pokrótce wygląda tak. Czy jest na to jakieś sensowne rozwiązanie (IMG:style_emoticons/default/questionmark.gif) ?

pozdr,
AdamP
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




1) do diva o id div1 wgrywasz ajaxem znowu diva o id div1. W efekcie koncowym masz dwa divy o id div1 jeden w drugim
2) nie <script> a <script type="text/javascript">
3) trudno mi coś wiecej powiedziec, mi tam takie cos zawsze dziala
4) masz to gdzies wystawione? Mozemy obejrzec to w dzialaniu?
5) zainstaluj sobie FireBug'a dla FireFox - bardzo pomaga przy takich sprawach
Go to the top of the page
+Quote Post
kojocik76
post
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.06.2010

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


Co do pkt 1. i 2. to faktycznie, jest jak mówisz. mój błąd co nie zmienia faktu że mi nie działa.

Dopiero dziś mogłem wystawić przykład. Możecie to podejrzeć na http://www.czg.pl/ajax/1.php
Oba comboboxy wywołują akcję ajaxa. plik 2.php daje takie samo echo form1. efekt można zobaczyć.

1.php
  1.  
  2. <html>
  3. <head>
  4. <script type="text/javascript" src="calendar.js"></script>
  5. <script type="text/javascript" src="jquery-1.4.2.js"></script>
  6. </head>
  7. <body>
  8.  
  9. <script type="text/javascript">
  10. // tworzymy zmienna
  11.  
  12. function formget1(url, divobj, form)
  13. {
  14. var parameters = getFormValues(form);
  15. jQuery.ajax({
  16. type: "POST",
  17. url: url,
  18. dataType: 'html',
  19. data: parameters,
  20. success: function(html_out) {
  21. $('#div1').html(html_out);
  22. }
  23. });
  24. }
  25.  
  26. function getFormValues(form)
  27. {
  28. var str = "";
  29. var fobj = document.getElementById(form);
  30. var valueArr = null;
  31. var val = "";
  32. var cmd = "";
  33. for(var i = 0;i < fobj.elements.length;i++) {
  34. switch(fobj.elements[i].type) {
  35. case "text":
  36. str += fobj.elements[i].name +
  37. "=" + escape(fobj.elements[i].value) + "&";
  38. break;
  39. case "textarea":
  40. str += fobj.elements[i].name +
  41. "=" + escape(fobj.elements[i].value) + "&";
  42. break;
  43. case "select-one":
  44. str += fobj.elements[i].name +
  45. "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
  46. break;
  47. case "radio":
  48. if (fobj.elements[i].checked) {
  49. str += fobj.elements[i].name +
  50. "=" + fobj.elements[i].value + "&";
  51. }
  52. break;
  53. case "checkbox":
  54. if (fobj.elements[i].checked) {
  55. str += fobj.elements[i].name + "=1&";
  56. } else {
  57. str += fobj.elements[i].name + "=0&";
  58. }
  59. break;
  60. }
  61. //str += fobj.elements[i].name +
  62. // "=" + fobj.elements[i].type + "&";
  63.  
  64. }
  65. str = str.substr(0,(str.length - 1));
  66. return str;
  67. }
  68.  
  69. </script>
  70.  
  71. <?php
  72.  
  73. echo '<div id="div1">
  74. <form name="form1" id="form1" action="1.php" method="post" >
  75.  
  76. <select name="s1" id="s1" onchange="formget1(\'2.php\',\'div1\',\'form1\');" style="width:160;">
  77. <option value="0" selected="selected">aaaa</option>
  78. <option value="2" >bbbb</option>
  79. </select>
  80. <select name="s2" id="s2" onchange="formget1(\'2.php\',\'div1\',\'form1\');" style="width:160;">
  81. <option value="0" selected="selected">cccc</option>
  82. <option value="2" >dddd</option>
  83. </select>
  84. <input type="text" name="f111" value="12345"/>
  85. <script type="text/javascript">
  86. DateInput("k15", true, "YYYY-MM-DD", "2010-06-25");
  87. </script>
  88. <input type=submit tabindex="102" value="test" name="submit">
  89. </form>
  90. ';
  91. print_r($_POST);
  92.  
  93. ?>
  94. </div>
  95. </body>
  96. </html>
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Mi tam Twoje selecty przeladowują całą stronę. Nic dziwnego ze ci nie dziala (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
kojocik76
post
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.06.2010

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


Ano właśnie coś jest nie tak z <script .... w pliku 2.php. bo jak wytne ten fragment to jest OK. Zerknij teraz (IMG:style_emoticons/default/exclamation.gif) !
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




a pokaz dokladnie co ladujesz w skript2.php
Włącznie z javascriptami. Dokladnie co do joty prosze (IMG:style_emoticons/default/smile.gif)

Co robi te:
DateInput("k15", true, "YYYY-MM-DD", "2010-06-25");
Bo mi się w firebugu wywala ze nie znalazl elementu k15 czy jakos tak.
Go to the top of the page
+Quote Post
kojocik76
post
Post #10





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.06.2010

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


plik 2.php

  1. <?php
  2.  
  3. <form name="form1" id="form1" action="1.php" method="post" >
  4.  
  5. <select name="s1" id="s1" onchange="formget1(\'2.php\',\'div1\',\'form1\');" style="width:160;">
  6. <option value="0" selected="selected">aaaa</option>
  7. <option value="2" >bbbb</option>
  8. </select>
  9. <select name="s2" id="s2" onchange="formget1(\'2.php\',\'div1\',\'form1\');" style="width:160;">
  10. <option value="0" selected="selected">cccc</option>
  11. <option value="2" >dddd</option>
  12. </select>
  13. <input type="text" name="f111" value="xxxxxxx"/>
  14.  
  15. <input type=submit tabindex="102" value="test" name="submit">
  16. </form>
  17. ';
  18. print_r($_POST);
  19.  
  20. ?>


i wersja z javascript

  1. <?php
  2.  
  3. <form name="form1" id="form1" action="1.php" method="post" >
  4.  
  5. <select name="s1" id="s1" onchange="formget1(\'2.php\',\'div1\',\'form1\');" style="width:160;">
  6. <option value="0" selected="selected">aaaa</option>
  7. <option value="2" >bbbb</option>
  8. </select>
  9. <select name="s2" id="s2" onchange="formget1(\'2.php\',\'div1\',\'form1\');" style="width:160;">
  10. <option value="0" selected="selected">cccc</option>
  11. <option value="2" >dddd</option>
  12. </select>
  13. <input type="text" name="f111" value="xxxxxxx"/>
  14. <script type="text/javascript">
  15. DateInput("k15", true, "YYYY-MM-DD", "1999-01-15");
  16. </script>
  17. <input type=submit tabindex="102" value="test" name="submit">
  18. </form>
  19. ';
  20. print_r($_POST);
  21.  
  22. ?>


DateInput tworzy kontrolke data ktora masz w formularzu podstawowym plik 1.php
ale problem chyba ogolnie jest z javascriptem po zaladuwaniu kodu w ajax. zamieniajac na
  1. <script type="text/javascript">
  2. document.write(2+3);

jest to samo (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No hej,
to wina przez to document.write
Jak tam dasz zwyklego alerta
alert('blabla');
to dziala.
A twoj kalendarz również korzysta z document.write.

Nigdy nie uzywam tego ustrojstwa "document.write" więc się nigdy nie spotkalem z tym problemem.
Nie mozesz skorzystac z normalnej kontrolki kalendarza? np. jQuery calendar. One pracują trochę bardziej "normalnie" (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Nigdy nie uzywam tego ustrojstwa "document.write" więc się nigdy nie spotkalem z tym problemem.

Tej konstrukcji można używać wyłącznie na etapie renderowania strony. Więc w jakimkolwiek zdarzeniu ona po prostu nie zrobi niczego.
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Więc w jakimkolwiek zdarzeniu ona po prostu nie zrobi niczego.
Hehe, no wlasnie nie. W tym wlasnie opisanym tu przypadku to "badziewie" nie dość ze robi to jeszcze psuje (IMG:style_emoticons/default/smile.gif) . powoduje odswieżenie strony.
Go to the top of the page
+Quote Post
kojocik76
post
Post #14





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.06.2010

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


OK. Tak zrobiłem. i działa (IMG:style_emoticons/default/exclamation.gif) ! dzięki wielkie za pomoc (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 25.08.2025 - 03:23