Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z Ajaxem (eval())
Forum PHP.pl > Forum > XML, AJAX
mihow
Witajcie!
Mam problem z pewnym skryptem Ajaxa.
Otóż chciałem zrobić sobie na stronie tzw. chained select boxes, czyli w zależności od wybranej opcji w jednym <select> w drugim <select> będzie coś wyświetlać.

Oto kod:

  1. <script type="text/javascript" src="ajax.js"></script>
  2.  
  3. <script type="text/javascript" language="javascript">
  4.  
  5. var ajax = new Array();
  6.  
  7. function getSubCategoryList(sel)
  8. {
  9. var category = sel.options[sel.selectedIndex].value;
  10. document.getElementById('dhtmlgoodies_subcategory1').options.length = 0; //
  11. if(category.length>0){
  12. var index = ajax.length;
  13. ajax[index] = new sack();
  14.  
  15. ajax[index].requestFile = 'getsubcategory.inc.php?category='+category;
  16. ajax[index].onCompletion = function(){ createSubCategories(index) };
  17. ajax[index].runAJAX();
  18. }
  19. }
  20. function createSubCategories(index)
  21. {
  22. var obj = document.getElementById('dhtmlgoodies_subcategory1');
  23. eval(ajax[index].response);
  24. }
  25.  


Pod FF wszystko działą jak należy, ale pod IE 6,7,8 wyświetla mi się błąd w tej linii:

  1. eval(ajax[index].response);


Niestety problem mnie przerasta i nie umiem sobie z nim poradzić.

Pomożecie? smile.gif

Pozdrawiam
Michał
askone
Cytat(mihow @ 19.08.2010, 13:15:29 ) *
Pod FF wszystko działą jak należy, ale pod IE 6,7,8 wyświetla mi się błąd w tej linii:

  1. eval(ajax[index].response);


Jaki komunikat błędu??
mihow
Cytat(askone @ 19.08.2010, 12:30:44 ) *
Jaki komunikat błędu??


Coś takiego:

Wiadomość: Błąd składni
Wiersz: 38
Znak: 3
Kod: 0

askone
Hmmm... Takie błędy są najlepsze winksmiley.jpg

To pokaż jeszcze co zawiera "response"?
everth
Może to będzie dla ciebie użyteczne.
mihow
Cytat(everth @ 19.08.2010, 12:43:31 ) *
Może to będzie dla ciebie użyteczne.


A czy jesteś w stanie zmodyfikować ten mój kod tak, aby było dobrze? smile.gif
Niestety w JS i Ajax jestem zielony.
everth
Jak jesteś zielony to zacznij zabawę od jQuery i zostaw jemu zabawę z zawiłościami implementacji po stronie przeglądarki.

Jeśli chcesz mimo wszystko brnąć w to dalej to zauważ że w podanym przeze mnie poście ktoś podał gotową funkcję-protezę, wklej ją u siebie i stosuj zamiast eval (jeśli to jest rozwiązanie twojego problemu, pewności nie mam).
mihow
Cytat(askone @ 19.08.2010, 12:40:45 ) *
Hmmm... Takie błędy są najlepsze winksmiley.jpg

To pokaż jeszcze co zawiera "response"?


W response jest coś takiego:

obj.options[obj.options.length] = new Option('Jakaś nazwa 1','1');\n
obj.options[obj.options.length] = new Option('Jakaś nazwa 2','2');\n
obj.options[obj.options.length] = new Option('Jakaś nazwa 3','3');\n

itd
askone
Hej

Może rzeczywiście lepiej będzie jak poczytasz o jquery i skorzystasz z funkcji $.post() lub ewentualnie $.ajax(). Wtedy bezproblemowo obsłużysz żądania ajax a dodatkowo w zdarzeniu oncomplete dasz $.html i wkleisz kod <option value="1">option1</option> itd. Powinno śmigać smile.gif

Pozdrawiam

mihow
Najciekawsze jest to, że na dwóch różnych serwerach wirualnych na Home.pl skrypt raz działa a raz nie. Tzn na jednym działa, a na drugim serwerze ten sam skrpyt już nie działa pod IE...

Czy AJAX ma coś wspólnego z konfiguracją serwera?
cojack
A co Ty zwracasz w ogóle? W odpowiedzi serwera, co Ty zwracasz?
#luq
Spróbuj
Kod
eval( '(' + ajax[index].response + ')' );


Ale masz to źle zrobione bo eval`a nie powinno się używać ze względów bezpieczeństwa i szybkości. Twój request powinien zwracać JSON`a w takiej postaci:
Kod
[
    { text: 'Jakaś nazwa 1', number: 1 },
    { text: 'Jakaś nazwa 2', number: 2 },
    { text: 'Jakaś nazwa 3', number: 3 }
]

i dalej to już obrabiać to po pobraniu tych danych...
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.