Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> xmlhttprequest i problem wysłania danych, Czemu skrypt php wywoływany w tle nie widzi zmiennych?
Kwazi
post 9.07.2009, 14:51:16
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 22.11.2006

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


Witam,
Być może temat był już wałkowany, z góry przepraszam

Mianowicie mam kłopot z którym się już jakiś czas męczę.
Od razu mówię że nie używam żadnych bibliotek AJAXa, a sam tworzę instrukcje xmlhttprequest, kwestia przyzwyczajenia
Kłopot polega na tym że kiedy tworzę sobie obiekt xmlhttprequest i metodą post lub get przesyłam zmienne do skryptu php w tle, to ten wogóle ich nie odczytuje...

Co dziwne na localhoscie wszystko śmiga jak marzenie, a po wgraniu na serwer już nie, choć kiedyś na tym serwerze chodziło wszystko bez zarzutu (tak kojarze).

Skrypt JS z wywołaniem żądania
  1. if(navigator.appName == "Microsoft Internet Explorer") http = new ActiveXObject("Microsoft.XMLHTTP");
  2. else http = new XMLHttpRequest();
  3.  
  4. function deleteFile(myFileName){
  5.  
  6. var ret;
  7. http.abort();
  8. http.open("POST","Ajax/port_delfile.php?tmpFile="+myFileName, true);
  9. http.onreadystatechange=function() {
  10.  
  11. if(http.readyState == 4) {
  12. ret = http.responseText;
  13. alert(ret);
  14. }
  15. }
  16.  
  17. http.send(1);
  18.  
  19. }



Prosty skrypt usuwający plik
  1. <?php
  2. unlink($tmpFile);
  3. echo "moj katalog: $tmpFile";
  4. ?>



Oczywiście sam unlink wyrzuca błąd w tle za pomocą alerta bo nie może usunąć pustego pliku.
Z kolei alert(ret) zwraca alert ("moj katalog: "), a powinien zwrócić np: alert ("moj katalog: data_user/example.jpg")

Czytałem trochę tu i tu na necie, gdzieś tam pisali o jakiś odwołaniach do domen,
ale wiele mi to nie pomogło. Nie wiem gdzie leży problem, być może trzeba mi to łopatologicznie wyjaśnić

Gdzie popełniam błąd? Czemu na lokalu chodz oki?
Jest to kwestia serwera?(chyba nie), źle wywołuję metodę open?

Pozdrawiam,
dziękuje
Go to the top of the page
+Quote Post
erix
post 9.07.2009, 15:06:12
Post #2





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




Cytat
Jest to kwestia serwera?(chyba nie), źle wywołuję metodę open?

register_globals?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
omeck
post 9.07.2009, 22:10:16
Post #3





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

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


Skoro używasz bezpośrednio obiektu XMLHTTPRequest i chcesz użyć metody POST, to musisz dodatkowo wysłać nagłówek - myślę, że to stanowi problem:

Kod
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");


Czyli cuś takiego:

  1. var http;
  2. if(navigator.appName == "Microsoft Internet Explorer") http = new ActiveXObject("Microsoft.XMLHTTP");
  3. else http = new XMLHttpRequest();
  4.  
  5. function deleteFile(myFileName){
  6.  
  7. var ret;
  8. http.abort();
  9. http.open("POST","Ajax/port_delfile.php?tmpFile="+myFileName, true);
  10. http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  11. http.onreadystatechange=function() {
  12. if(http.readyState == 4) {
  13. ret = http.responseText;
  14. alert(ret);
  15. }
  16. }
  17. http.send(1);
  18. }


Ten post edytował omeck 9.07.2009, 22:11:22
Go to the top of the page
+Quote Post
Kwazi
post 10.07.2009, 07:32:52
Post #4





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 22.11.2006

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


hej,
dzięki za reakcje, co do register_globals to dyrektywa ustawiona jest na on, więc nie ma znaczenia,
czy użyje tablicy superglobalnej $_POST czy nie, w zasadzie jasna sprawa że powinno tam być $_POST

Co do nagłówka, to już dokładałem
  1. http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

nie pomógł, ale żeby się upewnić, sprawdziłem raz jeszcze


Wykonałem kolejnych kilka testów i zaobserwowałem ciekawą rzecz:
Inna funkcja korzystająca z xmlhttprequest, sprawdza czy e-mail jest w bazie
  1. function checkEmail(email){
  2.  
  3. var ret;
  4. http.abort();
  5. http.open("POST","Ajax/reg_checkemail.php?tmpMail="+email, true);
  6. http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  7. http.onreadystatechange=function() {
  8.  
  9. if(http.readyState == 4) {
  10. ret = http.responseText;
  11. if(ret!="") {
  12. existEmail=true;
  13. }
  14. else {
  15.  
  16. existEmail=false;
  17. }
  18.  
  19. }
  20. }
  21.  
  22. http.send(1);
  23. }



po stronie serwera skrypt php
  1. <?
  2. //------ Połączenie z bazą -------------------------------------------------------------------------------------------------------------
  3. require ("../Bin/db_class.php");
  4. $dbClass=new dbClass();
  5. $dbClass->dblogon();
  6.  
  7. //-----------------------------------------------------------------------------------------------------------------------------------------
  8. $returnEmail=$dbClass->getValuleFromTable("users", "email", "where lower(email)='".strtolower($_POST['tmpMail'])."'");
  9. echo "$returnEmail";
  10. //-----------------------------------------------------------------------------------------------------------------------------------------
  11. ?>


I chyba faktycznie z tymi domenami jest coś na rzeczy.
bo gdy wywołuje adres stronki z rodzimej domeny serwera: http://ottargo.altaynet.masternet.pl/
to działa ok, i jeśli adres jest już w bazie to zwraca błąd.

Natomiast jeśli stronkę wywołam z adresu http://www.ottargo.pl/ to już jest lipa...
Zrobiłem też prosty przykład z jQuery i to samo...
Ciekawe? Ma ktoś jakieś wyjaśnienia?

Pozdrawiam,
dziękuje za sugestie

Ten post edytował Kwazi 10.07.2009, 07:42:27
Go to the top of the page
+Quote Post
viking
post 10.07.2009, 08:47:30
Post #5





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Ale odwołujesz się do tej samej domeny czy nie? Tutaj sytuacja nie jest do końca jasna, trwają rozmowy czy to wprowadzić w przeglądarkach, czy nie stanowi luki w bezpieczeństwie. Przykładowo w FF 3.0.11 (https://bugzilla.mozilla.org/show_bug.cgi?id=424923) zostało usunięte.


--------------------
Go to the top of the page
+Quote Post
Kwazi
post 13.07.2009, 11:35:38
Post #6





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 22.11.2006

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


Jak podałem w przykładzie odwołuje się względnie do katalogu "Ajax" z plikami php działającymi w tle.
Nie odwołuje się do tych plków zaczynając od http://...
Z resztą nie jest to problem tylko w FF, ale w IE jest to samo


Może podam nowy testowy przykład z linkami:

Kod pliku JS wysyła do pliku php zmienną tmpFile, a w zwrocie powinien dostać alert z napisem: example
  1. <?php
  2. <script language=JavaScript>
  3. var http = false;
  4. if(navigator.appName == "Microsoft Internet Explorer") http = new ActiveXObject("Microsoft.XMLHTTP");
  5. else http = new XMLHttpRequest();
  6.  
  7. //----------------------------------------------------------------------------------------------------------------------
  8. function test_ajax(myFileName){
  9.  
  10.    var ret;
  11.    http.abort();
  12.    http.open("POST","ajax.php?tmpFile="+myFileName, true);
  13.    http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  14.    http.onreadystatechange=function() {
  15.  
  16.                if(http.readyState == 4) {
  17.                        ret = http.responseText;
  18.                        alert(ret);
  19.              }
  20.        }
  21.  
  22.     http.send(1);
  23.  
  24. }
  25. //------------------------------------------------------------------------------------------------------------
  26. </script>
  27.  
  28. <script language=JavaScript>
  29. test_ajax("example");
  30. </script>
  31. ?>


kod php w tle:
  1. <?
  2. echo "moj katalog: ".$tmpFile;
  3. ?>


nie ma znaczenia czy $tmpFile czy $_POST['tmpFile'], bo register_globals=on

i wynik finalny pod linkami
pod oryginalną domeną serwera: http://ottargo.altaynet.masternet.pl/xmlht...quest/index.php -> działa ok
pod wykupioną domeną: http://www.ottargo.pl/xmlhttprequest/index.php -> nie działa

Pomóżcie, bo zwariuje w końcu
Pozdrawiam

Kombinuje i kombinuje,
jakiś mały kroczek jest, tyle że nie do końca rozwiązuje problem.

Wszedłem na konfiguracje serwera przez www, udostępnioną przez usługodawcę www.masternet.pl
i zmieniłem dla mojej domeny, która stoi na www.home.pl wersję z php5 na php4 i wszystko chodzi bez zarzutu...

Hmmm... ciekawe, czemu z php4 działa a z php5 nie?
Czy problemem może być to że domena wykupiona jest na home.pl,
a fizycznie zawartość serwisu znajduje się na innym serwerze?

Ten post edytował Kwazi 13.07.2009, 09:22:23
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.06.2025 - 12:36