Este grupo de trabajo ha pasado mucho tiempo investigando para dar espuestas a tu interrogante, te ofrecemos la solución por esto nuestro objetivo es que te sea de mucha apoyo.
Solución:
JSONP requiere que la respuesta esté envuelta en algún tipo de función de devolución de llamada, porque funciona inyectando una etiqueta de secuencia de comandos en el documento como mecanismo para cargar datos de otro dominio.
Esencialmente, lo que sucede es que una etiqueta de secuencia de comandos se inserta dinámicamente en el documento de la siguiente manera:
callback
depende del recurso que está llamando, es común que el parámetro sea callback
aunque.
someFn
luego se utiliza para procesar los datos devueltos por el servidor, por lo que el servidor debe responder con:
someFn(theData: 'here');
El someFn se pasa como parte de la solicitud, por lo que el servidor debe leerlo y envolver los datos de manera adecuada.
Todo esto es asumiendo que está tomando el contenido de otro dominio. Si es así, está limitado por la misma política de origen: http://en.wikipedia.org/wiki/Same_origin_policy
Después de actualizar a Jquery 1.5 e intentar hacer una llamada entre dominios, tuve el mismo problema. Eventualmente encontré que $.getJSON funcionó. Específicamente,
$.getJSON(url,
function(data)
yourFunction(data);
return false;
);
La URL que usé fue así:
var url = WEB_SERVER_URL;
url = url + "&a=" + lat;
url = url + "&b=" + lng; ....
url = url + "&jsoncallback=?";
En el servidor, que se está ejecutando en otro servidor y tengo el control de este código, se agregó:
PrintWriter writer = response.getWriter();
String jsonString = json.toString(JSON_SPACING);
String callback = request.getParameter("jsoncallback");
// if callback in URL and is not just the "?" (e.g. from localhost)
if (callback != null && callback.length() > 1)
writer.write(callback + "(" + jsonString + ");");
else
writer.write(jsonString);
(El objeto json es una instancia de JSONObject, el código se puede encontrar aquí http://www.json.org/java/)
cuando está utilizando jsonp como tipo de datos (realizando una solicitud de dominio cruzado) Jquery genera una función aleatoria y se agrega a la URL solicitada como una cadena de consulta llamada devolución de llamada (¿devolución de llamada =?), Debe agregar datos json de respuesta como un parámetro de esta función como se indica a continuación –
url : http://www.dotnetbull.com/cross-domain-call.ashx?ref=jquery-jsonp-request
url call by ajax :
http://www.dotnetbull.com/cross-domain-call.ashx?ref=jquery-jsonp-request&callback=jQuery1510993527567155793_137593181353
Los datos de respuesta deberían tener este aspecto:
string callback = context.Request.QueryString["callback"];
if (!string.IsNullOrEmpty(callback))
context.Response.Write(string.Format("0(1);", callback, jc.Serialize(outputData)));
else
context.Response.Write(jc.Serialize(outputData));
Leer más sobre : parsererror después de la solicitud jquery.ajax con el tipo de contenido jsonp
valoraciones y comentarios
Si te ha resultado provechoso este artículo, sería de mucha ayuda si lo compartes con el resto programadores y nos ayudes a extender este contenido.