Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/03/2013, 12:05
Avatar de marlanga
marlanga
 
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 10 meses
Puntos: 206
Respuesta: Lerr Json de mi web

Para que JSONP funcione, tu PHP tiene que tener esta forma:

Código PHP:
Ver original
  1. <?php
  2.     $array = array("no"=>"encontrado");
  3.     if(isset($_GET['callback'])){
  4.         echo $_GET['callback'].'('.json_encode($array).')';
  5.     }
  6.      else
  7.     {
  8.         echo json_encode($array);
  9.     }
  10. ?>

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 original
  1. mi_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.