Para que JSONP funcione, tu PHP tiene que tener esta forma:
JSONP funciona porque la cadena JSON es devuelta envuelta en una función "callback". Si realizas una llamada a AJAX a otro servidor, da un error de CROSS-DOMAIN. El truco de JSONP es llamar a otro servidor como si recuperaras un SCRIPT de javascript con
<script src="http://otro.servidor.com" type="text/javascript"></script>
Esa ruta puede ser perfectamente un PHP, pero lo que debe generar es un código javascript que tenga esta forma:
Código Javascript
:
Ver originalmi_funcion_callback( {"array":[1,2,3,4], "variable":"valor1"});
La implementación de dicha función estará la página que quiere llamar por AJAX a otro servidor mediante JSONP, lo único que tienes que saber es que te devolverán un objeto JSON donde están contenidos los datos.
Asi que como ves, ¿Cómo sabe el servidor externo cómo se llama la función con la que debe envolver la cadena JSON (En este ejemplo, mi_funcion_callback)?
Pues enviándosela también porGET en la url así:
<script src="http://otro.servidor.com?callback=mi_funcion_callback" type="text/javascript"></script>
Esto lo hace JQUERY por tí cuando le pones el dataype JSONP al jquery.ajax. Dicha variable en jquery se llama "callback", y la envía por la URL, así que por eso en el primer PHP estamos recogiendo un $_GET["callback"] para envolver el json_encode.