Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [advAJAX] HTML oraz JavaScript w responseText
Forum PHP.pl > Forum > XML, AJAX > AJAX
Seth
Troche spamuje tymi pytaniami ale nie moge znalezc odpowiedz na nastepujace pytanie:

Za pomoca advAJAX pobieram, uzywajac get'a strony, ktora zawiera XHTMLa oraz wstawki JavaScript (w tagach <script>). Pozniej, uzywajac innerHTML, wrzucam to do div'a.
Problem polega na tym, ze mimo ustawienia mimeType na text/html, pobrany fragment kodu nie zostaje "sparsowany" przez przeglade w taki spsob, aby JavaScript mogl sie wykonac.

Czy jest na to jakas metoda?
Alkagar
hmmm jeżeli dobrze myśle to to bylo juz kilka razy pisane (w czym raz ja zadawalem to pytanie :-) )
  1. data = obj.responseText.split('\n');
  2. arraylen = data.length;
  3. var i = 0;
  4. while(i < arraylen)
  5. {
  6. if( data[i].indexOf("script") > -1)
  7. {
  8. i++;
  9. while(data[i].indexOf("/script") < 0)
  10. {
  11. eval(data[i]);
  12. i++;
  13. }
  14. }
  15. i++;
  16. }

W tym działa ładnie pod IE i Operą tylko ostrzegam od razu, że potem jest problem z <table> i wywala błąd jeżeli masz to w responseText.

Druga metoda:
  1. var data=obj.responseText;
  2. var ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:<\/script>)';
  3. var match = new RegExp(ScriptFragment, 'img');
  4. var response = data.replace(match, ''); //w response masz calosc bez skryptów JS
  5. var scripts = data.match(match); //w scripts masz same skrypty JS
  6. match = new RegExp(ScriptFragment, 'im');
  7. for (var i = 0; i < scripts.length; i++)
  8. eval(scripts[i].match(match)[1]);
  9. }

Lepsza od tej pierwszej ale mi pod Operą nie działa niestety ( nie wiem czemu bo innym działa)

Wypróbuj sobie i zobacz co lepsze :-)

Pozdrawiam,
Alk
Seth
Dzieki wielkie.

Przeszukalem forum ale pod innym kontem slow kluczowych, wiec nie znalazlem Twoje posta :/
Ehh co to zmeczenie robi z czlowieka ;P
anopak
@Seth może spróbuj przeżucić się na prototype? bardzo dobra, szybka i rozbudowana obsługa AJAX'a... smile.gif
Seth
Powiem tak:
od niedawna wzialem sie za AJAXa mimo, ze go uzywalem w nieco inny sposob duzo wczesniej (sam obiekt XMLHTTPRequest pod IE). Obecnie jestem zafascynowany mozliwosciami advAJAX oraz prostata jego wykorzystania - naprawde naleza sie gratulacje Anakinowi za kawal dobrej roboty.

Ale... patrzac na prototype nie wiem za co sie wziasc biggrin.gif
Dokumentacja jest troche uboga, a w obecnej chwili nie mam za bardzo czasu na zmiane advAJAXa na cos innego... terminy zakonczenia projektu, snia mi sie juz po nocach winksmiley.jpg

Jednak napewno przyjrze sie temu frameworkowi bo slyszalem mase pochlebnych opinii o nim smile.gif
marcz
Czy nie ma jeszcze innej metody?
Ta pierwsza psuje mi niestety tabelki, a ta druga nie działa w ogóle (FF).
Nickesh
Ostatnia odpowiedź w tym wątku była rok temu, ale może akurat się przyda jeszcze...
W prototype ta funkcja wygląda tak:

  1. <?php
  2. function evalScripts( text )
  3. {
  4.  
  5.  var scripts = [];
  6.  var script_sources = text.split(/<script.*?>/);
  7.  counter = 0;
  8.  for (var i=1; i < script_sources.length; i++)
  9. scripts[counter++] = script_sources[i].split(/</script>/)[0];
  10.  
  11.  for (var i=0; i < counter; i++)
  12.  eval( scripts[i] );
  13. }


... i chyba działa wszędzie.
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.