Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z AJAX między http: i https:
kristofo
post 28.03.2014, 15:22:49
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 28.03.2014

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


Witam.
Mam problem z AJAXem gdy w IE ze strony HTTP odwołuje się do strony HTTPS. Więcej szczegółów:
jest formularz z polem. Po wyjściu z pola wywoływana jest funkcja test(this), która ma za zadanie sprawdzić czy wprowadzona wartość jest prawidłowa.
Sprawdzenie polega na tym, że trzeba wywołać stronę: "https://dad-atlas.datasolutions.pl/karta.php?karta=" + wpisana_do_pola_wartość.
Wywołana strona zwraca TAK lub NIE (po sprawdzeniu otrzymanego kodu).
Skrypt działa w Firefox'e i w nowszym IE, ale w IE wersja <= 9 wywala się błędem przy operacji req.open("GET",.... komunikat błędu: "odmowa dostępu" (access denied).
Wygląda na to, że jest problem gdy polecenie ...open("GET", "https://..." odwołuje się do strony HTTPS. Odwołanie jest ze strony HTTP.
Czy ktoś mi powie co robię źle? Jak to obejść?

P.S. Z pewnych względów nie mogę zastosować JQuery. Jeżeli już jakiś freamework to tylko Mootools.


  1. <input type="text" id="kod" onblur="test_kod(this)" />
  2. </form>



[JAVASCRIPT] pobierz, plaintext
  1. function test_kod(pole) {
  2. var req = createXMLHTTPObject();
  3. // w IE zawsze się wywala na następnym poleceniu. W debugerze komunikat "brak dostępu"
  4. req.open("GET","https://dad-atlas.datasolutions.pl/karta.php?karta="+pole.value,true);
  5. req.setRequestHeader('User-Agent','XMLHTTP/1.0');
  6. req.onreadystatechange = function () {
  7. if (req.readyState != 4) return;
  8. if (req.status != 200 && req.status != 304) {
  9. // alert('HTTP error ' + req.status);
  10. return;
  11. }
  12. if (req.responseText == "TAK") {
  13. //alert('sukces');
  14. } else {
  15. //alert('nieprawidlowy kod');
  16. };
  17. }
  18. if (req.readyState == 4) return;
  19. req.send();
  20. }
  21.  
  22. var XMLHttpFactories = [
  23. function () {return new XMLHttpRequest()},
  24. function () {return new ActiveXObject("Msxml2.XMLHTTP")},
  25. function () {return new ActiveXObject("Msxml3.XMLHTTP")},
  26. function () {return new ActiveXObject("Microsoft.XMLHTTP")}
  27. ];
  28.  
  29. function createXMLHTTPObject() {
  30. var xmlhttp = false;
  31. for (var i=0;i<XMLHttpFactories.length;i++) {
  32. try {
  33. xmlhttp = XMLHttpFactories[i]();
  34. }
  35. catch (e) {
  36. continue;
  37. }
  38. break;
  39. }
  40. return xmlhttp;
  41. }
[JAVASCRIPT] pobierz, plaintext


Ten post edytował kristofo 28.03.2014, 15:26:35
Go to the top of the page
+Quote Post
trueblue
post 28.03.2014, 15:46:33
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Masz żądanie międzydomenowe, akurat tutaj różnica jest w protokole.
Przyznam, że nie wiem czy nowsze przeglądarki w tym przypadku zachowują się poprawnie czy właśnie IE<=9.

Spróbuj tego:
http://mootools.net/docs/more/Request/Request.JSONP (na pewno działa, przy czym wykonywałem zapytanie pomiędzy różnymi domenami, ale obydwie bez SSL)
http://blog.creapptives.com/post/133630525...n-ajax-requests


--------------------
Go to the top of the page
+Quote Post
kristofo
post 28.03.2014, 19:52:55
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 28.03.2014

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


Cytat(trueblue @ 28.03.2014, 15:46:33 ) *
http://mootools.net/docs/more/Request/Request.JSONP (na pewno działa, przy czym wykonywałem zapytanie pomiędzy różnymi domenami, ale obydwie bez SSL)
http://blog.creapptives.com/post/133630525...n-ajax-requests


Jednak to nie rozwiązuje mojego problemu. Wygląda na to, że problem leży w tym, że z niezabezpieczonej witryny HTTP odwołuję się do zabezpieczonej HTTPS. Gdzieś czytałem o wykorzystaniu "iframe", żeby to ominąć, ale sam nie umiem tego zastosować. Czyli problem wciąż pozostaje otwarty.
Go to the top of the page
+Quote Post
trueblue
post 28.03.2014, 20:32:19
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Ajaxem wywołaj skrypt PHP, a w nim CURL'em pobierz wartość z podanej strony, zwróć, odbierz w Ajaxie.


--------------------
Go to the top of the page
+Quote Post
kristofo
post 29.03.2014, 00:20:37
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 28.03.2014

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


Cytat(trueblue @ 28.03.2014, 20:32:19 ) *
Ajaxem wywołaj skrypt PHP, a w nim CURL'em pobierz wartość z podanej strony, zwróć, odbierz w Ajaxie.


To dla mnie zupełna nowość. A jakieś przykłady implementacji?
Go to the top of the page
+Quote Post
trueblue
post 29.03.2014, 08:03:04
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


http://stackoverflow.com/questions/4372710/php-curl-https
http://bato3.bloog.pl/id,3665077,title,cUR...ttps,index.html
curl_exec() zwraca pobraną treść, wystarczy ją wydrukować (echo) i odebrać w Ajaxie.


--------------------
Go to the top of the page
+Quote Post
kristofo
post 29.03.2014, 09:09:30
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 28.03.2014

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


Cytat(trueblue @ 29.03.2014, 08:03:04 ) *
http://stackoverflow.com/questions/4372710/php-curl-https
http://bato3.bloog.pl/id,3665077,title,cUR...ttps,index.html
curl_exec() zwraca pobraną treść, wystarczy ją wydrukować (echo) i odebrać w Ajaxie.


Dawno nic nie pisałem w PHP i ogólnie słabo go znam. Widzę, że trzeba będzie do niego wrócić ;-) Teraz muszę rozpracować jak "wstrzyknąć" kawałek kodu PHP w stronę i jak przekazać parametry z JS do PHP i s powrotem.
Nie rezygnuję jednak z poszukiwania rozwiązania w JS :-)
Go to the top of the page
+Quote Post
trueblue
post 29.03.2014, 09:36:53
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Nie musisz nic wstrzykiwać.
Jeden z przykładów, które podałem zmodyfikuj na swoje potrzeby.
W req.open() wywołaj URL tego skryptu podając mu jako parametr kod karty.
W skrypcie PHP odbierz ten parametr poprzez $_GET.


--------------------
Go to the top of the page
+Quote Post
kristofo
post 29.03.2014, 10:23:49
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 28.03.2014

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


Cytat(trueblue @ 29.03.2014, 09:36:53 ) *
Nie musisz nic wstrzykiwać.
Jeden z przykładów, które podałem zmodyfikuj na swoje potrzeby.
W req.open() wywołaj URL tego skryptu podając mu jako parametr kod karty.
W skrypcie PHP odbierz ten parametr poprzez $_GET.


Niestety nie mam możliwości tworzenia plików po stronie serwera. Mogę tylko dodawać skrypty JS i w pewnym zakresie modyfikować już istniejące strony. :-(
Więc utworzenie oddzielnego pliku z kodem PHP odpada.
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: 25.04.2024 - 11:01