2012-05-08 14 views
18

Prima di tutto, ho cercato la risposta al mio problema in vari argomenti e non sono riuscito a trovare una soluzione che funzionasse con il mio codice.

Sto cercando di ottenere la risposta da un servlet, se vado a http://XXXZZZ/Servlet/Login?login=pepe&pass=1234 ricevo valida JSON come previsto:

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

Ma quando provo lo stesso con $ .ajax, ottengo 2 errori .

$.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); 
    } 
}); 

primo errore (nella finestra di pop-up):

parsererror Error: jQuery17104145435250829905_1336514329291 was not called 

secondo errore (nella console Chrome):

Uncaught SyntaxError: Unexpected token : Login 1 

(E c'è il JSON sto aspettando).

P.S. Devo usare dataType: "jsonp", perché se uso "json" ho anche problemi con il Cross-Domain.

+0

cosa è la funzione di errore per? – adeneo

+1

Non è possibile * forzare * JSONP. Deve essere supportato e restituito dal server. Se non lo fai, sei sfortunato. Se hai il controllo sul server, falla supportare JSONP. –

+0

sto anche programmando il server;) –

risposta

10
succes : function(data){ 

Questo è un errore di battitura:

success : function(data){ 
+8

+1 per gli occhi d'aquila. – undefined

+0

No, mi dispiace ho scritto sbagliato qui, nel codice il suo scritto "successo" –

1

Prima di tutto si dispone di un errore di battitura nel parametro di successo; ti sei perso il finale s. Inoltre, quando si esegue una richiesta JSONP è necessario restituire le informazioni JSON nel formato JSONP; che dovrebbe includere il token di callback come parte della stringa di restituzione. Una stringa campione JSONP apparirebbe piace questo:

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

Date un'occhiata a questa pagina per ulteriori informazioni sulle specifiche JSONP: http://devlog.info/2010/03/10/cross-domain-ajax/

20

Se si utilizza jsonp quindi la sintassi è sbagliata

È bisogno di tornare

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

e anche aggiungere alle opzioni richiesta Ajax

jsonp: false, 
jsonpCallback: "myJsonMethod" 

così

$.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); 
    } 
}); 

(e portate fissare il success come @voyager notato)

+0

Così nel server devo cambiare 'JSONObject Accesso statico (login String, String password) getta JSONException {' a ' static String Login (Login stringa, password stringa) { ... json.put ("id", id); json.put ("login", accesso); json.put ("chiave", chiave); return ("myJsonMethod (" + json + ");"); ' –

+0

@PabloPostigo, è possibile utilizzare la [' classe JSONPObject'] (http://jackson.codehaus.org/1.5.3/javadoc/org/codehaus /jackson/map/util/JSONPObject.html) –

+0

ha avuto un problema simile. aggiungendo jsonp: falso era ciò che ha fissato le cose per me – Luke

Problemi correlati