2009-04-26 15 views
9

Próbowałem wykonać żądanie ajax na zewnętrzny serwer. Do tej pory nauczyłem się używać getJSON z powodów bezpieczeństwa?Jquery getJSON na zewnętrzną stronę PHP

Teraz nie mogę wykonać prostego połączenia z zewnętrzną stroną. Próbowałem uprościć go tak bardzo, jak tylko mogę, ale nadal nie działa. mam 2 pliki test.html & test.php

mój test.html sprawia, że ​​połączenia tak, aby localhost do testowania:

$.getJSON("http://localhost/OutVoice/services/test.php", function(json){ 
    alert("JSON Data: " + json); 
}); 

i chcę, aby moje test.php wrócić prosty "test":

$results = "test"; 
echo json_encode($results); 

Prawdopodobnie popełniam niesamowitą pomyłkę debiutanta, ale nie mogę tego rozgryźć. Ponadto, jeśli to działa, w jaki sposób mogę wysłać dane na moją stronę test.php, tak jak zrobiłbyś to test.php? Id = 15?


Strona test.html wzywa strony test.php na localhost, ten sam katalog ja nie otrzymuję żadnych błędów, nie tylko alert ..

+0

Co za strona, która zgłasza żądanie. Chcę się upewnić, że nie masz problemu z zabezpieczeniami międzydomenowymi. – bendewey

+0

Czy otrzymujesz jakieś błędy? – SilentGhost

+0

Strona test.html wywołuje stronę test.php na localhost, tym samym katalogu Nie dostaję żadnych błędów, po prostu brak alertu. – Pmarcoen

Odpowiedz

16

To mógłby być to, że przystań dostałem wywołanie zwrotne w test.php. Również json_encode akceptuje tylko macierz:

$results = array("key" => "value"); 
echo $_GET['callback'] . '(' . json_encode($results) . ')'; 
// the callback stuff is only needed if you're requesting from different domains 

jQuery automatycznie przełącza się jsonp (to jest przy użyciu skryptu znaczniki zamiast XMLHttpRequest) przy użyciu http://. Jeśli masz test.html i test.php w tej samej domenie, spróbuj użyć względnych ścieżek (i bez wywołań zwrotnych).

+1

+1. Zaimplementuję także wywołania zwrotne również po stronie serwera, ale jeśli zdecyduję się na hostowanie klienta i serwera w tej samej domenie, nadal będę używać wywołania zwrotnego? (Prawdopodobnie będę w stanie odpowiedzieć na własne pytanie za około godzinę ...) – opyate

+0

Oddzwonienie zawsze zadziała, nawet jeśli zażądasz pliku z tej samej domeny. Udowodniono również, że szybsze jest używanie wywołania zwrotnego JSON niż żądanie i ocena obiektu (ponieważ eval jest tak wolny). Zespół Yahoo Flickr napisał o tym kilka miesięcy temu: http://code.flickr.com/blog/2009/03/18/building-fast-client-side-searches/ – moff

+2

To całkowicie otwiera cię na cześć XSS - http: // www.metaltoad.com/blog/using-jsonp-safely – kajo

2

Najprostszym rozwiązaniem byłoby dodanie poniższego kodu przed jakimkolwiek wyjściem do pliku test.php, wtedy masz więcej elastyczności w używaniu jakich metod, standardowe wywołanie ajaxowe powinno zadziałać.

header ('Access-Control-Allow-Origin: *'); 

Jednak należy użyć funkcji zwrotnej json podczas pobierania danych z serwera, nad którym nie masz kontroli.

+0

+1, ale powinieneś naprawdę ograniczyć go do serwerów, z których żądasz. Również obsługa IE jest opóźniona, więc jeśli potrzebujesz obsługi przeglądarki, lepiej iść z metodą JSONP. –