2009-04-26 14 views
9

Ho cercato di fare una richiesta AJAX a un server esterno. Ho imparato fino ad ora che ho bisogno di usare getJSON per farlo per motivi di sicurezza?Jquery getJSON a PHP pagina esterna

Ora, io non riesco a fare una semplice chiamata a una pagina esterna. Ho provato a semplificarlo il più possibile ma non funziona ancora. Ho 2 file, test.html & test.php

mia test.html effettua una chiamata del genere, a localhost per il test:

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

e voglio il mio test.php restituire un semplice 'test':

Probabilmente sto facendo un incredibile errore da principiante ma non riesco a capirlo. Inoltre, se funziona, come posso inviare i dati alla mia pagina test.php, come faresti come test.php? Id = 15?


La pagina test.html sta chiamando pagina test.php su localhost, stessa directory non ottengo errori, proprio nessun avviso ..

+0

cosa nella pagina questo è che fanno la richiesta. Voglio assicurarmi che non stia avendo un problema di sicurezza tra domini. – bendewey

+0

stai riscontrando errori? – SilentGhost

+0

La pagina di test.html sta chiamando pagina test.php su localhost, stessa directory non ottengo errori, proprio nessun avviso .. – Pmarcoen

risposta

16

E potrebbe essere che si rifugio Ho una richiamata in test.php. Inoltre, json_encode accetta solo un array:

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

jQuery commuta automaticamente JSONP (cioè utilizzando lo script tag anziché XMLHttpRequest) quando si utilizza http://. Se hai test.html e test.php sullo stesso dominio, prova a utilizzare percorsi relativi (e nessuna callback).

+1

+1. Sto per implementare i callback anche sul lato server, ma se scelgo di ospitare client e server nello stesso dominio, utilizzerò comunque un callback per interromperlo? (Probabilmente sarò in grado di rispondere alla mia domanda in circa un'ora o giù di lì ...) – opyate

+0

Un callback funziona sempre, anche se si richiede il file dallo stesso dominio. È anche dimostrato che è più veloce usare un callback JSON piuttosto che richiedere e valutare l'oggetto (poiché eval è così lento). Il team di Yahoo Flickr ha scritto su questo un paio di mesi fa: http://code.flickr.com/blog/2009/03/18/building-fast-client-side-searches/ – moff

+2

Che totalmente si apre a un venerability XSS - http: // www.metaltoad.com/blog/using-jsonp-safely – kajo

2

La soluzione più semplice sarebbe quella di aggiungere il codice seguente prima di qualsiasi output del file test.php, quindi si ha una maggiore flessibilità con i metodi che si utilizzano, una chiamata standard ajax dovrebbe funzionare.

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

Tuttavia, utilizzare la richiamata cosa JSON quando i dati da un server di ottenere oltre il vostro controllo.

+0

+1, ma dovresti davvero limitarlo ai server da cui stai richiedendo. Inoltre, il supporto di IE per questo è in ritardo, quindi se hai bisogno del supporto del browser, meglio andare con il metodo JSONP. –

Problemi correlati