Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] pobranie danych w formacie json metodą POST z innego serwera
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
mjetek
Witam, jak w temacie czy mogę w jakiś sposób pobrać dane w formacie JSON z serwera znajdującego się w innej domenie metodą POST, bez przeładowywania strony?
wookieb
file_get_contents z innego serwera
mjetek
potrzebuję to zrobić używając JavaScriptu i dodatkowo przesłać argumenty.
wookieb
No to ci mówie, że za pomoca php pobierasz sobie zawartość z innego serwera. A javascriptem wywolujesz ten skrypt.
mjetek
Prawdę mówiąc nie rozumie smile.gif Sytuacja wygląda tak, że do serwera z którego chcę pobrać jakieś dane, które produkuje działający tam skrypt PHP nie mam dostępu, nie mogę tam umieścić żadnego kodu. Muszę napisać skrypt, działający po stronie przeglądarki, który te dane odbierze. Wiem że dane, które chcę odebrać będą w formacie JSON. Skrypt ma wysyłać argument metodą POST.
Taki AJAX tylko cross domain winksmiley.jpg
wookieb
1) Ajax wywołuje skrypt SKRYPT.php
2) Skrypt php wywołuje SKRYPT_Z_INNEGO_SERWERA.php (curl, file_get_contents i streamy)
3) SKRYPT.php odpowiada ajaxowi
#luq
Teoretycznie możesz też użyć techniki ukrytej ramki do tego, ale zbudowanie brigde`a (bo to wym mówi @wookieb) jest w sumie prostsze.
krnombrny
a ja widzę tu problem - zagadnienie z 2 etapu rekrutacji w pewnej firmie webmasterskiej...
mjetek
winksmiley.jpg ale szukanie pomocy przy rozwiązywaniu problemów na forach internetowych to chyba nic złego?

bridge'a zrobiłem za pomocą samego curla winksmiley.jpg W każdym bądź razie dziękuję za pomoc.
SHiP
Może nieaktualne ale głupoty piszecie. Dane trzeba pobrać za pomocą JavaScript a nie jakichś tam PHP(Tak wynika to z pierwszego postu). Tak więc lepiej zrobić coś takiego:

Kod
    ASCIIEncoding enc=new ASCIIEncoding();
    string postData="dane=daneresc&dane2=dane2tresc";
    byte[] data = enc.GetBytes(postData);

    HttpWebRequest myRequest =
      (HttpWebRequest)WebRequest.Create("http://example.com/plik");
    myRequest.Method = "POST";
    myRequest.ContentType="application/x-www-form-urlencoded";
    myRequest.ContentLength = data.length;
    Stream newStream=myRequest.GetRequestStream();

    newStream.Write(data,0,data.Length);
    newStream.Close();
#luq
@SHiP dlaczego głupoty?
Dlatego piszemy o PHP bo we wszystkich nowoczesnych przeglądarkach zaimplementowaną takie cudo jak The Same Orgin Policy czyli zabezpieczanie przed pobieraniem danych za pomocą obiektu XHR z innej strony (innej domeny, jeśli komunikacja odbywa się na innym porcie, blablabla...) i nomen omen można na czystko zrobić to w JS`ie bo The Same Orgin Policy jest implementowane w przeglądarce (a nie jak większość twierdzi jest to ograniczenie JS`a/Ajax`a!) i tą opcje da się wyłączyć, tyle że 99% ludzi ma tą opcję włączoną i po ich stronie już takie zapytania będą odrzucane już na warstwie przeglądarki.

Wyjścia są 2:
- budowa brigde`a
- technika ukrytej ramki

Co do Twojego kodu, to eee... wyszła nowa wersja ECMAScriptu?
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.