Después de mucho deambular leyendo un montón de incoherencias llegué a un post que me mostró la luz. http://bob.ippoli.to/archives/2005/12/05/remote-json-jsonp/
De ahí en mas avancé y aqui van mis conclusiones.
1) llamada ajax en javascript con jQuery:
$.ajax({ dataType: "jsonp", url: "http://algunotrodominio.com/unscript.php", data: "parametro1=valor1¶metro2=valor2", type: GET, crossDomain: true, jsonpCallback:'jpCallback', success: function(jsondata) { datos = jsondata[0].respuesta.datos; otros = jsondata[0].respuesta.otracosa; (hacer algo con todo esto.) }, error: function (jqXHR, textStatus, errorThrown) { (haceralgo) } }); jpCallback(jsondata){ (pueden ejecutar alguna validación previa con los datos, o no hacer absolutamente nada.) }
2) unscript.php :
<?php $json = '{ "respuesta": { "datos": [ {"codigo": 1, "dato": "algo1"}, {"codigo": 2, "dato": "algo2"} ], "otracosa":"undatomasadevolver" } }'; echo 'jpCallback(['.$json.'])'; ?>
Y eso es todo. Si no lo captaron: al $.ajax() de jQuery modifican el dataType a "jsonp", esto solo ya habilita a hacer una llamada cross domain. pero hay un parametro mas crossDomain : true. Sin esto tambien funciona. jsonpCallback : 'nombredefuncioncallback' Al decir que esto es "jsonp" jQuery agrega 2 parametros a la cadena de datos que se envian por ejemplo:
http://algunotrodominio.com/unscript.php?callback=jQuery17206061169685839634_1344380380503¶metro1=valor1¶metro2=valor2&_=1344380387364
si en cambio agregamos el parametro jsonpCallback : 'funcioncallback' entonces la llamada se parecera a esto:
http://algunotrodominio.com/unscript.php?callback=funcioncallback¶metro1=valor1¶metro2=valor2&_=1344380387364
Como sea lo importante es que la devolucion del script PHP debe ser el nombre de la funcion callback y como parametro de la funcion el JSON que quiero devolver. jQuery ejecuta entonces la funcion callback y luego al success: envia solo el objeto JSON. En el ejemplo muestro como acceder a los distintos componentes.
Espero que les sea útil.