2009-04-26 14 views
9

He intentado hacer una solicitud de AJAX a un servidor externo. He aprendido hasta ahora que necesito usar getJSON para hacer esto por razones de seguridad.Jquery getJSON a la página externa de PHP

Ahora, parece que no puedo hacer una simple llamada a una página externa. He tratado de simplificarlo tanto como puedo, pero todavía no funciona. Tengo 2 archivos, test.html & prueba.php

mi test.html hace una llamada de este tipo, a localhost para la prueba:

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

y yo quiero que mi prueba.php para volver un simple 'prueba':

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

Probablemente estoy cometiendo un error increíble de novato, pero parece que no puedo resolverlo. Además, si esto funciona, ¿cómo puedo enviar datos a mi página test.php, como lo haría con test.php? Id = 15?


La página test.html está llamando a la página test.php en el servidor local, mismo directorio no consigo ningún error, simplemente no hay alerta ..

+0

¿Cuál es la página que está haciendo la solicitud? Quiero asegurarme de que no tenga un problema de seguridad entre dominios. – bendewey

+0

¿Estás recibiendo algún error? – SilentGhost

+0

La página test.html está llamando a la página test.php en el servidor local, mismo directorio no consigo ningún error, simplemente no hay alerta .. – Pmarcoen

Respuesta

16

Se podría ser que usted no ha tiene una devolución de llamada en test.php. Además, json_encode sólo acepta una matriz:

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

jQuery cambia automáticamente a JSONP (es decir, el uso de la escritura etiquetas, en vez de XMLHttpRequest) cuando se utiliza http://. Si tiene test.html y test.php en el mismo dominio, intente utilizar rutas relativas (y sin devoluciones).

+1

+1. Estoy a punto de implementar devoluciones de llamadas en el lado del servidor también, pero si elijo alojar el cliente y el servidor en el mismo dominio, ¿seguiré utilizando una devolución de llamada? (Probablemente pueda responder mi propia pregunta en aproximadamente una hora más o menos ...) – opyate

+0

Una devolución de llamada siempre funcionará, incluso si solicita el archivo desde el mismo dominio. También se ha demostrado que es más rápido utilizar una devolución de llamada JSON que solicitar y evaluar el objeto (ya que eval es tan lento). El equipo de Yahoo Flickr escribió sobre esto hace unos meses: http://code.flickr.com/blog/2009/03/18/building-fast-client-side-searches/ – moff

+2

Eso te abre totalmente a una verosimilitud XSS - http: // www.metaltoad.com/blog/using-jsonp-safely – kajo

2

La solución más simple sería agregar el código siguiente antes de cualquier salida a su archivo test.php, luego tiene más flexibilidad con los métodos que usa, una llamada ajax estándar debería funcionar.

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

Sin embargo, usar la cosa de devolución de llamada JSON cuando su obtención de datos desde un servidor fuera de su control.

+0

+1, pero realmente debería restringirlo a los servidores que está solicitando. Además, el soporte de IE para esto está rezagado, por lo que si necesita soporte de navegador, es mejor ir con el método JSONP. –

Cuestiones relacionadas