Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ajax+xmlHttpRequest+includowanie strony
Forum PHP.pl > Forum > XML, AJAX > AJAX
organista18
Witam serdecznie całą społeczność forum.

Problem na jaki się natknąłem jest dość niezwykły. A właściwie jest to pytanie:
Posiadam stronkę o takim schemacie jak na obrazku niżej:


W divie main, posiadam w php include, które jest zależne od przekazanego parametru get z linku w menu.
Kod podstrony która jest includowana wygląda tak:

  1. <head>
  2. <style type="text/css" media="screen">@import url(../src_img/style000.css );</style>
  3. <script language = "javascript">
  4. var XMLHttpRequestObject = false;
  5.  
  6. if (window.XMLHttpRequest) {
  7. XMLHttpRequestObject = new XMLHttpRequest();
  8. } else if (window.ActiveXObject) {
  9. XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
  10. }
  11.  
  12. function getData(dataSource, divID)
  13. {
  14. if(XMLHttpRequestObject) {
  15. var obj = document.getElementById(divID);
  16. XMLHttpRequestObject.open("GET", dataSource);
  17.  
  18. XMLHttpRequestObject.onreadystatechange = function()
  19. {
  20. if (XMLHttpRequestObject.readyState == 4 &&
  21. XMLHttpRequestObject.status == 200) {
  22. obj.innerHTML = XMLHttpRequestObject.responseText;
  23. }
  24. }
  25.  
  26. XMLHttpRequestObject.send(null);
  27. }
  28. }
  29. </script>
  30. </head>
  31. <body>
  32. <div class="navigation">
  33. <caption>Edycja Kategorii Artykułów:</caption><br />
  34. <!-- menus START -->
  35. <form><input type="button" value="klik" onClick="getData('include/inc_catarts_add.txt', 'targetDiv')"></form>
  36. </div><p></p>
  37.  
  38. <div id='targetDiv'>
  39. </div>
  40. </body>


Strona która jest includowana pojawia się w divie który ma funkcję include. Jest przycisk, jednak po kliknięciu na ten przycisk, powinny się załadować do div'a 'targetDiv' (w pliku powyżej który jest includowany) dane z pliku inc_catarts_add.txt, jednak przeglądarka wogóle na kliknięcie przycisku niereaguje. Co może być przyczyną?
nospor
Cytat
jednak przeglądarka wogóle na kliknięcie przycisku niereaguje
Jestes pewien ze nie reaguje? A moze ci sie cala strona przeladowuje?
organista18
Tak, jestem pewien.
Jeżeli w div'ie 'targetDiv' dorzucę np.
  1. <p>Jakiś tekst</p>

to po kliknięciu na przycisk, napis 'Jakiś tekst' w divie zostaje...
Wygląda to na to, jakby ajax nie działał na includowanych stronach...
wookieb
jquery -> ajax.load
organista18
Wookie web, patrzałem na stronę jQuery i tam w przykładach była opisana cała taka funkcja, ale jak ją umieścić, ze wskazaniem na załadowanie danych do konkretnego div'a i jak ją podpiąć np pod link lub pod zdarzenie onClick tego przycisku?
nospor
chodzilo mi o to, ze przyciski BUTTON mają to do siebie, ze jak sie je klika to wysylają formularz, czyli defacto przeladowują strone i nici z twojego ajaxa. Nie zaobserwowales by ci sie strona przeladowala?
organista18
Nie zaobserwowałem. Spójrz tutaj: http://www.mjsp.pl/atest/ch02/index.html - przykład ajaxa na którym się opierałem.

a button ma wtedy to oczym piszesz, gdy w form method ustawimy get lub post. a ja tam w kodzie nie mam method...
wookieb
Musisz robic to na serwerze albo na localu. Jeżeli otwierasz plik .html tak, że w adresie strony na początku masz file:// to ajax nie pojdzie.
Potem zainstaluj firebuga i zobacz co mówi jego konsola.
nospor
Cytat
a ja tam w kodzie nie mam method...
domyslnie jest post smile.gif

Ale to moze bylo przy <button> a nie <input type="button"
organista18
Ok, a czy ktoś podałby przykład jak skorzystać z tej funkcji: http://docs.jquery.com/Ajax/load#urldatacallback w moim konretnym przypadku?

Tzn mam link i chcę użyż funkcji load z biblioteki JQuery.
wookieb
Cytat(organista18 @ 31.08.2009, 14:03:34 ) *
Ok, a czy ktoś podałby przykład jak skorzystać z tej funkcji: http://docs.jquery.com/Ajax/load#urldatacallback w moim konretnym przypadku?


No przecież masz napisane jak WÓŁ! Czego tutaj nie kumać? Masz w dodatku zakładkę "view source"
organista18
A przepraszam, nie zauważyłem zakładki examples. Zrobie jak napisali i dam znać czy problem rozwiązany.

Lipa. W pliku includowanym wpisałem taki kod:
  1.  
  2. <head>
  3. <style type="text/css" media="screen">@import url(../src_img/style000.css );</style>
  4. <script type="text/javascript" src="scripts/jquery.js"></script>
  5. <script type="text/javascript">
  6. $(document).ready(
  7. function()
  8. {
  9. $("#lk").click(
  10. function()
  11. {
  12. $("#targetDiv").load("inc_catarts_view.php");
  13. });
  14. });
  15.  
  16. </script>
  17. </head>
  18. <body>
  19. <div class="navigation">
  20. <caption>Edycja Kategorii Artykułów:</caption><br />
  21. <!-- menus START -->
  22. <li><a title="Lista Kategorii" href="#" id="lk">Lista kategorii</a></li>
  23. <li><a href="#" title="Dodaj Kategorie" id="dk">Dodaj kategorie</a></li>
  24. </div><p></p>
  25. <div id="targetDiv">
  26. <p>Tutaj ładowana strona</p>
  27. </div>
  28. </body>
  29.  


Czy coś źle robie?
wookieb
A w konsolę od firebuga zajrzał?
organista18
Nie zajrzał bo nie ma.
wookieb
To se zainstaluje. Narzędzia -> dodatki -> pobierz dodatki.
Fafu
W firefoxa jest wbudowana konsola błędów: Ctrl + Shift + J
wookieb
Ale nie pokazuje requestow ajaxowych.
organista18
Nie mam firefoxa, używam Opere. Wkleiłem przejrzysty, cały kod strony która jest includowana i to nie chce działać, pomimo tego, jak wyczytałem, framework jQuery jest pozbawiony tego błędu...
wookieb
No to zainstaluj. Firebug to najlepsze narzędzie do debugowanie po stronie www, że sobie tego nie wyobrażasz. Zamiast pisać 3 posty, że nie możesz zainstalować TO BYŚ TO JUŻ ZROBIŁ Z 3 RAZY I BYŁOBY PO PROBLEMIE.
organista18
Zainstalowałem, uruchomiłem. Włączyłem najpierw opcje javascript, a potem dom i klikając na link nic się nie zmieniało, debbuger nie pokazał mi w kodzie strony zaincludowanego pliku :|
wookieb
Wystaw to publicznie.
organista18
Ok.
Adres: http://www.mjsp.pl/mcms/edit.php

login: forumphp
haslo: forumphp

Edycja zawartości -> Kategorie artykułów -> link "Lista kategorii" - link który ma wywołać ajaxa, ale nie wywołuje. Schemat strony jak na obrazku w pierwszym poście, kod strony kategorie artykułów kilka postów wyżej.

Za pomoc z góry dziękuję winksmiley.jpg
wookieb
No byłem pewien, że nie zajrzałeś do firebuga...
http://www.mjsp.pl/mcms/include/inc_catarts_view.php 403 Forbidden

Zakładka "konsola" o której wcześniej mówiłem...
organista18
Może to być przez plik .htaccess?
wookieb
Ty to wiesz. Sprawdź czy taki plik jest, czy nie jest blokowany (np przez htaccess) itp itd
organista18
Tak, jest taki plik.
Jeżeli bezpośrednio otworzę stronę którą includuje, to nie ma problemu z ajaxem... i nie jest to zależne od .htaccess
http://www.mjsp.pl/mcms/include/inc_catarts.php
wookieb
No i teraz już działa ajax w twoim panelu. Spójrz.
organista18
Faktycznie... czyli na dobrą sprawe plik .htaccess pieprzy wszystko...

W pliku .htaccess mam tylko jedną linijke:
deny from all

Idzie jakoś zrobić, aby serwer umożliwiał ajaxowi dostęp do tych plików?

wookieb
poczytaj o mod_rewrite. Jak dałeś ta linijke to oznacza, ze blokujesz do dostep z poziomu przegladarki do wszystkich plikow w tym katalogu.
organista18
Takie było z początku założenie, żeby nikt nie grzebał w tym folderze, a dostęp do niego miał tylko php... jeżeli deny from all usunę, to dostęp do tych plików będzie mógł mieć każdy... próbuję szukać na googlach, jak to zrobić, żeby javascript miał dostęp do katalogu a z zewnątrz był zablokowany, ale póki co bezskutecznie...
nospor
twoje zalozenie jest bledne.
Skoro ajax ma miec do tego dostep, znaczy ze mozna miec do tego dostep i z palucha - koniec kropka.
Tylko pliki, do ktorych moze odwolywac sie php i nie ma byc do nich dostep przez przegladarke/ajax umieszczaj jako zabronione
organista18
Heh... a miało być tak pięknie... sprawdzanie czy zalogowany tylko przez strone główną, a już bezpośrednie pliki z operacjami na bazie danych includowane i ładowane przez ajax... No nic, trzeba trochę przerobić mechanizm... Dzięki wszystkim za pomoc winksmiley.jpg
nospor
ale ajax to nic innego jak odwolanie sie bezposrednie, tyle ze bez widocznosci dla uzytkownika.
Od biedy mozesz sprawdzacz czy żądanie przyszlo od ajaxa czy nie (przejrzyj sobie tablice $_SERVER) ale i to można oszukac wiec bym sobie glowy nie zawracał.
organista18
Problem rozwiąże w taki sposób, że przed każdym kodem html, dam php który będzie sprawdzał czy użytkownik zalogowany, jeżeli nie to informacja zwrotna: brak dostępu...

I jak myślałem...

na początku każdej strony która jest wczytywana do div'a przez ajax'a, dodałem takie coś:
  1. <?php
  2. include("config.php");
  3. if(login()){
  4. ?>
  5.  
  6. <!-- kod strony -->
  7.  
  8. <?php
  9. }
  10. else if(!login())
  11. {
  12. echo "Brak uprawnień...";
  13. }
  14. ?>


Adres strony: http://mjsp.pl/mcms/edit.php?t=1&src=catarts
hasło i login: forumphp

Wydaje mi się że strona ładowana do div'a gubi sesje... ;/
nospor
jak mozna zgubic cos czego wogole ze sobą nie wziąłes.

o session_start() zapomniał?
organista18
Racja... Czas najwyższy zrobić sobie przerwę winksmiley.jpg. Dzięki winksmiley.jpg

P.S. Troche się pogubiłem, bo tu includuje, tam wrzucam do diva i sie mi pomieszało winksmiley.jpg
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.