organista18
31.08.2009, 11:51:53
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:
<head>
<style type="text/css" media="screen">@import url(../src_img/style000.css );</style>
<script language = "javascript">
var XMLHttpRequestObject = false;
if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
} else if (window.ActiveXObject) {
XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
function getData(dataSource, divID)
{
if(XMLHttpRequestObject) {
var obj = document.getElementById(divID);
XMLHttpRequestObject.open("GET", dataSource);
XMLHttpRequestObject.onreadystatechange = function()
{
if (XMLHttpRequestObject.readyState == 4 &&
XMLHttpRequestObject.status == 200) {
obj.innerHTML = XMLHttpRequestObject.responseText;
}
}
XMLHttpRequestObject.send(null);
}
}
</script>
</head>
<body>
<div class="navigation">
<caption>Edycja Kategorii Artykułów:</caption><br />
<!-- menus START -->
<form><input type="button" value="klik" onClick="getData('include/inc_catarts_add.txt', 'targetDiv')"></form>
</div><p></p>
<div id='targetDiv'>
</div>
</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
31.08.2009, 11:56:11
Cytat
jednak przeglądarka wogóle na kliknięcie przycisku niereaguje
Jestes pewien ze nie reaguje? A moze ci sie cala strona przeladowuje?
organista18
31.08.2009, 12:06:54
Tak, jestem pewien.
Jeżeli w div'ie 'targetDiv' dorzucę np.
<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
31.08.2009, 12:07:22
jquery -> ajax.load
organista18
31.08.2009, 12:09:03
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
31.08.2009, 12:09:48
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
31.08.2009, 12:15:06
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
31.08.2009, 12:46:27
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
31.08.2009, 12:51:44
Cytat
a ja tam w kodzie nie mam method...
domyslnie jest post

Ale to moze bylo przy <button> a nie <input type="button"
organista18
31.08.2009, 13: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?
Tzn mam link i chcę użyż funkcji load z biblioteki JQuery.
wookieb
31.08.2009, 13:18:24
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
31.08.2009, 21:03:01
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:
<head>
<style type="text/css" media="screen">@import url(../src_img/style000.css );</style>
<script type="text/javascript" src="scripts/jquery.js"></script>
<script type="text/javascript">
$(document).ready(
function()
{
$("#lk").click(
function()
{
$("#targetDiv").load("inc_catarts_view.php");
});
});
</script>
</head>
<body>
<div class="navigation">
<caption>Edycja Kategorii Artykułów:</caption><br />
<!-- menus START -->
<li><a title="Lista Kategorii" href="#" id="lk">Lista kategorii</a></li>
<li><a href="#" title="Dodaj Kategorie" id="dk">Dodaj kategorie</a></li>
</div><p></p>
<div id="targetDiv">
<p>Tutaj ładowana strona</p>
</div>
</body>
Czy coś źle robie?
wookieb
31.08.2009, 21:06:40
A w konsolę od firebuga zajrzał?
organista18
31.08.2009, 21:09:10
Nie zajrzał bo nie ma.
wookieb
31.08.2009, 21:13:35
To se zainstaluje. Narzędzia -> dodatki -> pobierz dodatki.
Fafu
31.08.2009, 21:13:45
W firefoxa jest wbudowana konsola błędów: Ctrl + Shift + J
wookieb
31.08.2009, 21:20:35
Ale nie pokazuje requestow ajaxowych.
organista18
31.08.2009, 21:43:02
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
31.08.2009, 21:58:21
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
31.08.2009, 22:14:52
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
31.08.2009, 22:17:11
Wystaw to publicznie.
organista18
1.09.2009, 08:22:14
Ok.
Adres:
http://www.mjsp.pl/mcms/edit.phplogin: 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ę
wookieb
1.09.2009, 08:30:43
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
1.09.2009, 08:33:35
Może to być przez plik .htaccess?
wookieb
1.09.2009, 08:34:47
Ty to wiesz. Sprawdź czy taki plik jest, czy nie jest blokowany (np przez htaccess) itp itd
organista18
1.09.2009, 08:36:55
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
1.09.2009, 08:47:43
No i teraz już działa ajax w twoim panelu. Spójrz.
organista18
1.09.2009, 08:52:35
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
1.09.2009, 08:59:01
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
1.09.2009, 09:12:11
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
1.09.2009, 09:14:05
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
1.09.2009, 09:18:57
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
nospor
1.09.2009, 09:23:12
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
1.09.2009, 12:40:06
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ś:
<?php
include("config.php");
if(login()){
?>
<!-- kod strony -->
<?php
}
else if(!login())
{
echo "Brak uprawnień..."; }
?>
Adres strony:
http://mjsp.pl/mcms/edit.php?t=1&src=catartshasło i login: forumphp
Wydaje mi się że strona ładowana do div'a gubi sesje... ;/
nospor
1.09.2009, 12:42:03
jak mozna zgubic cos czego wogole ze sobą nie wziąłes.
o session_start() zapomniał?
organista18
1.09.2009, 12:44:27
Racja... Czas najwyższy zrobić sobie przerwę

. Dzięki

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