Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] XmlHttp.Open z innego serwera ?
Forum PHP.pl > Forum > XML, AJAX
freqfreq
Domeny a i b.
W domenie a mam skrypt php wrzucający dane przesłane mu poprzez GET do bazy MySQL.
W domenia b (i wielu innych) user ma na swojej stronie <script type="text/javascript" src="PLIK JS W DOMENIE A"></script>
W owym pliku JS znajduje się funkcja która pobiera x i y kliknięcia myszką i przesyła je (wraz z jeszcze paroma innymi zmiennymi) metodą XmlHttp do skryptu php w domenie a. Sposób ten jednakże nie działa z powodu znanego nam zabezpieczenia w AJAXie.
Czy istnieje teraz jakiś sposób na to aby powyższy skrypt działał? (user w domenie b nie może mieć żadnych moich skryptów na swoim serwerze, on ma tylko wstawiać linijkę ze <script> i tyle)

Pozdrawiam! blinksmiley.gif
sennin
W domenie b odsylaj wspolrzedne do pliku php w tej samej domenie i dopiero z tego pliku php łącz się z domeną a. Ewentualnie możesz spróbować tak: Stwórz ukrytą ramkę iframe z kilkoma polami input hidden. Zawartosc tej ramki niech bedzie na serwerze w domenie A. Po kliknieciu myszka ustaw wspolrzedne w polach ukrytych hidden i wykonaj submit na formularzu w ukrytym iframe. Wtedy dane pojda do serwera w domenie A.
freqfreq
w domenie b nie ma prawa być żadnych "moich" plików php smile.gif
Rozwiązałem to stosując
function przyklad(){
var img = new Image(1,1);
img.src = "http://domena.a/plik.w.domenie.a?zmienna1=" + zmienna1 + "&zmienna2=" + zmienna2; }

btw, Na tym forum na odpowiedzi przynajmniej z tego tematu czeka się godzinami w czasie w którym na innych miałem już tuziny odpowiedzi smile.gif
micheal.
HEj!

może mi ktoś powiedzieć, jak po tym zabiegu ->

Cytat(freqfreq @ 6.04.2008, 13:58:21 ) *
function przyklad(){
var img = new Image(1,1);
img.src = "http://domena.a/plik.w.domenie.a?zmienna1=" + zmienna1 + "&zmienna2=" + zmienna2; }


-> dalej powinno się przetworzyć te odebrane dane ze skryptu z innego serwera,
aby można było ich użyć?

pozdro
erix
Przez obrazek? Niestety, nie da się tak. ;]

Jeśli chcesz mieć obsługę międzydomenową - pozostaje albo proxy, albo XmlHttpRequest we Flashu, albo JSONP.
micheal.
Elo,

jeśli ktoś jeszcze jest zainteresowany międzydomenową wymianą danych (czyli tworzeniem aplikacji WEB N.0 cool.gif ) aarambo.gif

http://json.org/JSONRequest.html

btw, wiecie coś na temat obsługi obiektu JSONRequest przez przegladarki? Nie ma kłopotów z kompatybilnością?

pozdro
erix
No to pisałem przecież o JSONP. tongue.gif

Nie ma, gdyż polega to na wywołaniu odpowiedniej funkcji, przez bodajże dodanie do dokumentu nowego znacznika <script />. Jednak nie zmienia to faktu, że danych POST tak nie wyślesz. GET, to nawet obrazkiem żądanie pójdzie, gdy nie potrzebujesz danych potwierdzenia.
micheal.
Tak, już zrobiłem mały research, i oto co znalazłem: (dla takich ludzi jak ja, którzy szukają tu również informacji, a czasami jedyną odpowiedzią są jakieś tajemnicze akronimy blinksmiley.gif w końcu edukacja kosztuje biggrin.gif )


http://www.ibm.com/developerworks/library/wa-aj-jsonp1/
http://james.padolsey.com/javascript/cross...ith-jsonp-safe/
http://beebole.com/en/blog/general/sandbox...ashup-security/
http://ajaxian.com/archives/prototype-exte...pattern-support

Samo włączenie skryptu z innej domeny wygląda tak:


  1. <script type="text/javascript">
  2. function startJSONP()
  3. {
  4. var script = document.createElement( 'script' );
  5. script.setAttribute( 'type', 'text/javascript' );
  6. script.setAttribute( 'src', 'http://innadomena/skrypt?argumenty' );
  7. document.getElementsByTagName( 'head' )[0].appendChild( script );
  8. }



Teraz szukam odpowiedzi jak dokładnie włączyć w to obsługę callbacks. Wie ktoś?
guitar.gif
erix
Cytat
Teraz szukam odpowiedzi jak dokładnie włączyć w to obsługę callbacks.

Nie pamiętam, jak to było w jQuery, ale skrypt był chyba wpisywany jako innerHTML tagu script i na końcu po prostu dodawane wywołanie danej funkcji.

Stuprocentowej pewności nie ma, mogą być obostrzenia ze względu na bezpieczeństwo, ale spróbować możesz. [;

Cytat
Samo włączenie skryptu z innej domeny wygląda tak:

To NIE JEST włączenie, a OBEJŚCIE problemu, bo np. żądania POST tak nie wykonasz.
micheal.
W takim razie wskaż rozwiązanie, JEZELI znasz, bo z TEGO, co wiem, to jest JEDYNY sposób na wymianę danych cross domain. W Ajaksie obostrzenia ze względu na bezpieczeństwo utrzymują zasadę same domain.

Btw, to OBEJŚCIE problemu jest ogólnie akceptowane.

pozdr withstupidsmiley.gif
erix
Cytat
to jest JEDYNY sposób na wymianę danych cross domain

Czytałeś moje poprzednie posty? #5

Cytat
withstupidsmiley.gif

Niestety, nie ma emota I'm with blind.
zegarek84
Cytat(micheal. @ 28.07.2009, 16:02:31 ) *
Teraz szukam odpowiedzi jak dokładnie włączyć w to obsługę callbacks. Wie ktoś?
guitar.gif
mi to nie było potrzebne ale z tej strony wynika, że do wykrycia czy obiekt został pobrany można normalnie urzyć zdarzenie onload:
Howto Dynamically Insert Javascript And CSS

ps.
jakąś zmienną możesz traktować jako kontener i po załadowaniu jej danych do innych zmiennych lub całego obiektu poprostu ją usuwać - pobierając dane w formacie json mogą być np. odrazu przypisane do tej zmiennej by nie były zawieszone w prużni gdy będziesz dołączał nowy element DOM <script> - po wykryciu zdarzenia onload (które najwidoczniej działa) uruchamiasz funkcję która wykona operacje na odebranych danych zczytując otrzymany obiekt (potem obiekt możesz skasować) i wywołując odpowiednie operacje...

lub możesz nie przypisywać tego do zmiennej a pobrać z drzewa dom po załądowaniu dany element po czym odczytać jako tekst jego zawartość i zrobić z tym co tylko chcesz... ogólnie zależy jaki mechanizm chcesz obrać i jak to zabezpieczyć...
micheal.
@erix
Czytałem twoje posty, ale dla mnie pozostaje tylko JSONP i dynamiczne wstawianie skryptów. PHP proxy też odpada, bo to ma być aplikacja desktopowa (Adobe AIR), a Flash za bardzo kojarzy mi się z angielskim wyrażeniem TO FLUSH haha.gif

Dzięki zegarek za tego linka, nie czytałem jeszcze całego artykułu, ale z tego co widzę to będzie dobry
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.