Reklama: GRATIS wycena pozycjonowania strony , KLIKNIJ !

Stwórz profil

Musisz wpisać swoje imię
Musisz wpisać swoje nazwisko
Musisz wpisać poprawny e-mail
Musisz wpisać hasło (min. 8 znaków)
Musisz zaakceptować regulamin

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');
});
}
16.11.2011, 02:08

Piotr L. projektowanie user
experience,
interakcji,
architektura i...

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
16.11.2011, 09:24

Dariusz Półtorak Programista PHP

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
16.11.2011, 09:38

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.
16.11.2011, 14:16

Szymon Panecki tracenie czasu

Temat: Ajax a domena

Ktoś pomoże ? Bardzo mi zależy
16.11.2011, 19:26

Bartosz Ratajczyk Specjalista ds.
Operacji, TP SA

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
16.11.2011, 19:52

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
17.11.2011, 03:19

Adam Pawliczek Programista Web
Developer, Devesoft
Software Development
...

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...
17.11.2011, 11:26

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.
17.11.2011, 22:01

Adam Pawliczek Programista Web
Developer, Devesoft
Software Development
...

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.
17.11.2011, 22:09

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.
17.11.2011, 22:50

Andrzej Winnicki Frontend Architect,
Developer &
Magician

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
18.11.2011, 00:08

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/
24.11.2011, 21:10



Wyślij zaproszenie do