2012-05-08 16 views
18

Antes que nada, he estado buscando la respuesta a mi problema en varios temas y no he podido encontrar una solución que funcione con mi código.

Estoy tratando de obtener la respuesta de un servlet, si voy a http://XXXZZZ/Servlet/Login?login=pepe&pass=1234 recibo válido JSON como se esperaba:

{"id":3,"login":"pepe","key":"0D1DBA4BE87E02D43E082F9AA1ECFDEB"} 

Pero cuando intento lo mismo con $ .ajax, consigo 2 errores .

$.ajax({ 
    type : "Get", 
    url :"http://XXXZZZ/Servlet/Login", 
    data :"login="+login+"&password="+pass, 
    dataType :"jsonp", 
    success : function(data){ 
    alert(data);}, 
    error : function(httpReq,status,exception){ 
    alert(status+" "+exception); 
    } 
}); 

primer error (en la ventana emergente):

parsererror Error: jQuery17104145435250829905_1336514329291 was not called 

segundo error (en la consola de Chrome):

Uncaught SyntaxError: Unexpected token : Login 1 

(Y no es el JSON que estoy esperando)

P.S. Tengo que usar dataType: "jsonp", porque si uso "json" también tengo problemas con Cross-Domain.

+0

¿Cuál es la función de error para? – adeneo

+1

No puede * forzar * JSONP. Tiene que ser admitido y devuelto por el servidor. Si no, no tienes suerte. Si tienes control sobre el servidor, haz que sea compatible con JSONP. –

+0

también estoy programando el servidor;) –

Respuesta

10
succes : function(data){ 

Eso es un error tipográfico:

success : function(data){ 
+8

+1 para ojos de águila. – undefined

+0

No, lo siento lo escribí mal aquí, en el código de su escrito "éxito" –

1

En primer lugar usted tiene una errata en el parámetro de éxito; te perdiste el final s. Además, cuando está realizando una solicitud JSONP necesita devolver su información JSON en formato JSONP; que debería incluir el token de devolución de llamada como parte de la cadena de retorno. Una cadena de ejemplo JSONP vería gustos esto:

yourcallbacktoken({"id":3,"login":"pepe","key":"0D1DBA4BE87E02D43E082F9AA1ECFDEB"}) 

Tome un vistazo a esta página para obtener más información sobre las especificaciones JSONP: http://devlog.info/2010/03/10/cross-domain-ajax/

20

Si está utilizando jsonp continuación, la sintaxis es incorrecta

Usted que volver

myJsonMethod({"id":3,"login":"pepe","key":"0D1DBA4BE87E02D43E082F9AA1ECFDEB"}); 

y también agregar a sus opciones de solicitud de ajax

jsonp: false, 
jsonpCallback: "myJsonMethod" 

así

$.ajax({ 
    type : "Get", 
    url :"http://XXXZZZ/Servlet/Login", 
    data :"login="+login+"&password="+pass, 
    dataType :"jsonp", 
    jsonp: false, 
    jsonpCallback: "myJsonMethod", 
    success : function(data){ 
     alert(data);}, 
    error : function(httpReq,status,exception){ 
     alert(status+" "+exception); 
    } 
}); 

(y de curso fijar el success como @voyager observó)

+0

Así, en el servidor que tengo que cambiar 'JSONObject sesión estática (login, String contraseña) lanza JSONException {' a ' Login de cadena estático (String login, String password) { ... json.put ("id", id); json.put ("inicio de sesión", inicio de sesión); json.put ("clave", clave); return ("myJsonMethod (" + json + ");"); ' –

+0

@PabloPostigo, puede usar la clase [' JSONPObject'] (http://jackson.codehaus.org/1.5.3/javadoc/org/codehaus) /jackson/map/util/JSONPObject.html) –

+0

tenía un problema similar. agregando jsonp: falso fue lo que me arregló las cosas – Luke

Cuestiones relacionadas