Szymon Panecki

Szymon Panecki tracenie czasu

Temat: Ajax a domena

Witam, wszystko wydaję się ok gdy kod json pobierany jest z pliku np: json.js
lecz gdy ten sam kod json jest pobierany z linku http://domena.pl/jsonp/page?page=4" niestety nic nie działa.
Gdzie leży mój błąd i ca przeoczyłem? i jak zrobić żeby wreszcie działało
Dziękuję
Szymon

$(document).ready(function() {

var query = "http://domena.pl/jsonp/page?page=4";

$.ajax({
type: "GET",
dataType: "jsonp",
url: query,
success: parseJSON
});


function parseJSON(data){
$.each(data.books, function(i,item){
$('<li></li>').html('<b>Typ:</b> '+item.node.field_foto +'</br><b>Link</b>: '+ item.node +'</br>'+item.node +' - '+item.pubdate).appendTo('#books');
});
}

konto usunięte

Temat: Ajax a domena

a tak:

var query = "http://domena.pl/jsonp/page";

$.ajax({
type: "GET",
url: query,
data: "page=4",
dataType: "jsonp",
success: parseJSON
});

czemu GET a nie POST ?

ps. ewantualnie do parametrów możesz użyć też jQuery.param() - http://api.jquery.com/jQuery.param/Piotr L. edytował(a) ten post dnia 16.11.11 o godzinie 09:25

konto usunięte

Temat: Ajax a domena

A ja zadam głupie pytanie. To ta sama domena na której leży skrypt ? Warto czytać dokumentację. Link:
http://api.jquery.com/jQuery.get/

Cytuję:
Due to browser security restrictions, most "Ajax" requests are subject to the same origin policy; the request can not successfully retrieve data from a different domain, subdomain, or protocol.

Chyba w każdym tekście na temat ajaxa jest to wspomniane.

@Piotr Lewandowski
czemu POST a nie GET ? :PDariusz Półtorak edytował(a) ten post dnia 16.11.11 o godzinie 09:38
Szymon Panecki

Szymon Panecki tracenie czasu

Temat: Ajax a domena

Tak, jest w tej samej domenie a i tak nie działa.
Wzoruję się na przykładnie z poniższego linku http://jsfiddle.net/FANDS/WtjTz/ w którym pomimo że link jest z innej domeny to wszystko świetnie działa.
Szymon Panecki

Szymon Panecki tracenie czasu

Temat: Ajax a domena

Ktoś pomoże ? Bardzo mi zależy
Bartosz Ratajczyk

Bartosz Ratajczyk MS SQL Developer

Temat: Ajax a domena

Dariusz Półtorak:
Due to browser security restrictions, most "Ajax" requests are subject to the same origin policy; the request can not successfully retrieve data from a different domain, subdomain, or protocol.

Chyba w każdym tekście na temat ajaxa jest to wspomniane.

Chyba, że właśnie chodzi o JSONP.
Szymon Panecki:
Czy w tym przypadku jeśli zrobisz dataType: json, a nie jsonp to zadziała?

I czy link do jakiego się odwołujesz - to taki sam adres? Chodzi mi o to, że z tego co pamiętam http://www.domena.pl i http://domena.pl są traktowane jako różne w rozumieniu same origin policy. Nie wiem jak dokładnie działa jsonp w przypadku tej samej domeny.

I jeszcze jeden edit:

Co rozumiesz przez
wszystko wydaję się ok gdy kod json pobierany jest z pliku np: json.js lecz gdy ten sam kod json jest pobierany z linku http://domena.pl/jsonp/page?page=4" niestety nic nie działa.


W pierwszym przypadku jak rozumiem nie leci to przez AJAX? W takim wypadku stawiałbym na błąd formatu JSON - callback parseJSON jest bardzo rygorystyczny pod tym względem: http://api.jquery.com/jQuery.parseJSON/

Nie wiem jak w najnowszej wersji jQuery, w poprzednich po prostu nic nie zwracałoBartosz Ratajczyk edytował(a) ten post dnia 16.11.11 o godzinie 19:57
Szymon Panecki

Szymon Panecki tracenie czasu

Temat: Ajax a domena

Wytłumaczę sprawę najprościej jak potrafię.

mam oto taki link
http://domena.pl/zrr/page?page=4

i chciał bym żeby zdjęcia z tego linku były wyświetlane
jako prosty baner na kilku innych moich stronach.
Niby nic trudnego a jednak męczę się z tym prawie tydzień.
Próbowałem z file_get_contents, cURL i nic... Jakiś ślepy zaułek.

Będę bardzo wdzięczny za pomoc.Szymon Panecki edytował(a) ten post dnia 01.12.11 o godzinie 12:48
Adam Pawliczek

Adam Pawliczek Usability expert, UX
designer,
Interaction
specialist

Temat: Ajax a domena

Trzeba było tak od razu.
Obrazków nie da się ściągnąć ajaxem, obrazki w JS ściąga się "normalnie" (tak jak to robi przeglądarka) podając jego źródło, które jest url'em i może być z innego serwera. W jQuery wygląda to tak: http://jquery-howto.blogspot.com/2009/02/preload-image...
Szymon Panecki

Szymon Panecki tracenie czasu

Temat: Ajax a domena

Ok, ten baner może nie jest taki prosty, jako że strony działają na takiej zasadzie jak czytnik google czyli w miarę przewijania treść jest dostawiana na dole i tak w nieskończoność.
Zależy mi żeby owy baner działał tak samo czyli co 1000px dostawiał kolejne zdjęcie a jako że zdjęć jest ponad 4000 to nie mogę sobie pozwolić na załadowanie ich od razu bo trwało by to wieki dlatego chcę użyć AJAXa i wszystko działa gdy kod json jest umieszczony w pliku i ścieżka do niego wygląda tak:

var query = "json.js";

Lecz gdy identyczny kod jason jest pobierany z linku

var query = "http://domena.pl/jsonp/page?page=4";

nie dzieje się nic...

Podane przedtem przykłady są jedynie przykładami tej części kodu która mi nie działa.
A reszta kodu odpowiadająca za wstawienie obrazków jest taka jak a blogu który podałeś Adamie.

i tam działa wszystko ok.

Nie podaję całego kodu ponieważ jest dość skomplikowany i pomieszany, co może tylko skomplikować sprawę.
Są to moje początki z jquery i ogólnie z JS i mam nadzieje że w miarę sensownie to napisałem.
Adam Pawliczek

Adam Pawliczek Usability expert, UX
designer,
Interaction
specialist

Temat: Ajax a domena

Nie musisz ściągać wszystkich obrazków, po prostu ładujesz nowe/kolejne zdjęcia z listy (lista ich nazw ze ścieżką), żaden ajax nie jest do tego potrzebny.
Poza tym przemyśl jeszcze raz ładowanie do przeglądarki 4000 zdjęć, nawet jeżeli nie ładują się na raz.
Szymon Panecki

Szymon Panecki tracenie czasu

Temat: Ajax a domena

Problem w tym że dane muszą być dostarczane z innej domeny i w formacie json...
Nie mam pomysłu jak zrobić to w inny sposób.

Biorąc pod uwagę wysokość zdjęcia 500px i rozmieszczenie co 1000px nie sądzę żeby komuś kiedykolwiek udało się załadować wszystkie, a poza tym każde kolejne 5 zdjęć ma być ładowane po przewinięciu do 50% strony.

konto usunięte

Temat: Ajax a domena

cross-domain policy zabrania Ci komunikacji pomiedzy roznymi domenami. Jedyna opcja ktora mozesz zrobic, to np. request (GET, bo POST nie pojdzie jak dobrze pamietam) do strony. Np. robi sie w taki sposob tracking, gdzie na jakas akcje, robisz requesta do swojego skryptu PHP w innej domenie, a on jakies dane z GETa dodaje do bazy danych - aczkolwiek w tym przypadku JS na stronie nie oczekuje zadnej odpowiedzi.

Jesli chcesz uzywac jsona, to nie ma problemu, ale potrzebujesz callbacka.
Zakladam ze kontrolujesz skrypt i tresc w obydwoch domenach.
- Zrob prosty request GET ajaxem do swojego skryptu. W GET przekaz wszystkie parametry, ktore potrzebujesz (pamietaj ze limit jest 4096 znakow, tak na wszelki wypadek mowie). Nie podpinsasz tutja zadnego "success" czy innych metod. Po prostu zrob requesta jako script. (upewnie sie ze jest to asynchroniczne)
- W JSie gdzie masz swojego AJAX requesta dodaj nowa funkcje
callbackFunction(data) {
alert('callback reached with data!');
alert(data);
}

- odpowiedz JSONowa owin callbackiem....
np: callbackFunction('title':'something','img':'some/url.jpg');

Ta funkcja callbackowa moze dodawac nastepne 5 zdjec (czy ile tam trzeba) do DOM, po akcji jakiejs na stronie.. przesuniecie scrolla, nacisniecie buttona.. cokolwiek ;) grunt zebys zajaxowal a reszta sama sie stanie, jak bedzie gotowa.

W ten sposob zrobisz sobie prostego callbacka z ktorym mozesz zrobic co chcesz a dzieki asynchronicznosci (kocham za to JS) twoj kod wykona sie, jak dostanie odpowiedz od serwera... po sekundzie.. po pieciu... ;) W sumie mozesz zrobic loadera, ktory pokaze ladna animacje "loading" w momencie zaczecia ajaxowania, a wylaczy go, jak tylko odpali callbacka.

ps. chlopaki slusznie mowia o ustawieniu ajaxa na "jsonp" i powinno dzialac z podobna logika opisana wyzej, aczkolwiek mi to nigdy nie pasowalo do moich aplikacji i wolalem robic to po swojemu ;)Andrzej Winnicki edytował(a) ten post dnia 18.11.11 o godzinie 00:12
Szymon Panecki

Szymon Panecki tracenie czasu

Temat: Ajax a domena

Ok Niby wszystko ładnie chodzi i wydawało by się że najgorsze z mną lecz nie mogę sobie poradzić z banalnym połączeniem programów.

http://jsfiddle.net/FANDS/CWSeb/
Pierwszy miał się zająć uruchamianiem drugiego lecz jakoś mu to nie wychodzi.
http://jsfiddle.net/FANDS/22g69/

Po alercie nie ładuję kolejnej funkcji

Mniej więcej tak to próbowałem złożyć ale w żaden sposób nie chce działać.
http://jsfiddle.net/FANDS/g5WFM/
Jacek Szczęsny

Jacek Szczęsny Java Developer

Temat: Ajax a domena

Witam,
czy istnieje możliwość parsowania danych xml z zewnętrznych serwerów z wykorzystaniem JQuery ( $.ajax() ) w taki sposób, żeby nie było potrzeby predefioniowania adresu arkusza xml w skrypcie proxy.php ? Dla przykładu: chciałbym zrobić formularz w którym użytkownik poda własny (dowolny) adres arkusza XML, który następnie zostanie przetworzony i stosowne informacje zaprezentuje się na stronie (zakładam, że wszystkie arkusze xml podłączane przez użytkowników są stworzone w jednym schemacie). Skoro nie wiem jakie to będą domeny to nie mogę ich definiować zawczasu w skrypcie proxy.php. Czy ktoś mógłby się wypowiedzieć na ten temat? Ewentualnie zaproponować jakąś alternatywną metodę (musi to być dataType xml a nie JSON).
dzięki i pozdrawiam

konto usunięte

Temat: Ajax a domena

a musisz to mieć ajaxem ?
najlepiej skorzystaj file_get_contents lub po prostu wyślij plik xml na serwerze
Jacek Szczęsny

Jacek Szczęsny Java Developer

Temat: Ajax a domena

Cezary Haller dzięki za odpowiedź. Tak, musi to być ajaxem. Niektóre arkusze XML są bardzo dużych rozmiarów i każdorazowy upload wydaje się mało ekonomicznym rozwiązaniem. Podaję link do strony http://blisterek.awardspace.com Na serwerze znajduje się skrypt proxy.php

konto usunięte

Temat: Ajax a domena

to że nie chcesz uplodować pliku to nie znaczy, że musi być ajaxem,
możesz zrobić 2 rzeczy:
1) po wysłaniu formularza wczytać plik używając file_get_contents
2) link do pliku przekaż ajaxem do proxy.php w którym skorzystasz z file_get_contents

różnica będzie tylko polegała na przeładowaniu strony z formularzem, ale bez przeładowania
Maja Miarecki

Maja Miarecki Senior Frontend
Developer

Temat: Ajax a domena

Jacek Szczęsny:
Witam,
czy istnieje możliwość parsowania danych xml z zewnętrznych serwerów z wykorzystaniem JQuery ( $.ajax() ) w taki sposób, żeby nie było potrzeby predefioniowania adresu arkusza xml w skrypcie proxy.php ?

Przede wszystkim jesli koniecznie chcesz to robic ajaxem, to zostaje Ci tylko jsonp, czyli typ danych do transferow cross-domain. Jesli koniecznie xml to Czarek podrzucil Ci kilka pomyslow. Nie zawsze ma sie i rybki i akwarium :)
Jacek Szczęsny

Jacek Szczęsny Java Developer

Temat: Ajax a domena

Maja dzięki za odpowiedź:)
niestety jsonp odpada ponieważ serwery generują dokumenty xml i ja nic na to nie poradze :( (gdyby był dostęp do tych serwerów to możnaby wygenerować dane w xml i rownolegle w jsonp w zależności od parametrów żądania użytkownika ale dostępu do serwera nia ma i musi to być xml). Zastanawiam się jeszcze nad aliasami na wzór google doc api. Ale nie wiem czy to rozwiąże mój problem. Czy ktoś z Was kiedyś próbował tym sposobem? :)

konto usunięte

Temat: Ajax a domena

to jedyny sposob jest zrobienie sobie proxy.php lokalnie do ktorego bedziesz sie odwolywac - to proxy bedzie robilo calla tam gdzie jest xml, pobieralo, baaa parsowalo do jsona zeby ci ulatwic zycie i zwracalo do twojego lokalnego JSa



Wyślij zaproszenie do