mjetek
12.05.2010, 17:55:00
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
12.05.2010, 18:02:58
file_get_contents z innego serwera
mjetek
12.05.2010, 18:21:52
potrzebuję to zrobić używając JavaScriptu i dodatkowo przesłać argumenty.
wookieb
12.05.2010, 18:38:18
No to ci mówie, że za pomoca php pobierasz sobie zawartość z innego serwera. A javascriptem wywolujesz ten skrypt.
mjetek
12.05.2010, 20:33:47
Prawdę mówiąc nie rozumie

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
wookieb
12.05.2010, 21:50:10
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
12.05.2010, 22:44:41
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
13.05.2010, 20:17:49
a ja widzę tu problem - zagadnienie z 2 etapu rekrutacji w pewnej firmie webmasterskiej...
mjetek
13.05.2010, 20:26:31

ale szukanie pomocy przy rozwiązywaniu problemów na forach internetowych to chyba nic złego?
bridge'a zrobiłem za pomocą samego curla

W każdym bądź razie dziękuję za pomoc.
SHiP
23.05.2010, 12:16:33
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
31.05.2010, 23:26:01
@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.