Ver Mensaje Individual
  #8 (permalink)  
Antiguo 10/11/2012, 19:24
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 10 meses
Puntos: 1485
Respuesta: JSONP sin jQuery?

Cita:
El error de seguridad me lo da porque accedo desde local hacia un servidor externo...
eso es por la seguiridad que implementa javascript. la política del mismo origen prohibe hacer scripting a dominios que no sea el mismo origen.

Cita:
me pierdo un poco en la explicación que das para arreglar el asunto.
veamos. digamos que tienes un archivo en el servidor que genera un jsonp, jsonp.php:
Código:
<?php
if(isset($_POST['callback'])){
    $json = json_encode(array('var1' => 'val1', 'var2' => 'val2'));
    echo "{$_POST['callback']}('$json');";
}
?>
luego tienes lo siguiente en un script javascript:
  • un callback (una función normal) que parsea el string devuelto por jsonp.php.
  • una función que crea el elemento SCRIPT, le asigna como valor al atributo SRC la ruta de jsonp.php junto con el callback, y finalmente lo agrega al documento

Código:
// callback ;
function functionCallback(json){
var parsed = JSON.parse(json);
...
}

// json loader ;
function loadJSONP(url, callback){
var script = document.createElement("script");
script.setAttribute('src', url +"?callback="+ callback);
document.getElementsByTagName('head')[0].appendChild(script);
}
finalmente, para cargar el jsonp harías una invocación a loadJSONP indicando la URL y el nombre del callback, todos en forma de string: loadJSONP('jsonp.php', 'functionCallback');. el resultado final de la invocación anterior es un elemento como el siguiente:
Código:
<script src="jsonp.php?callback=functionCallback">
functionCallback('{"var1": "val1", "var2": "val2"}');
</script>
éste méotdo funciona porque quien hace la petición de cargar el json es a través del elemento y no directamente javascript. no obstante, debes tener cuidado que el json generado no tenga saltos de líneas porque en javascript un string no puede tener literalmente un salto de línea.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.