2012-05-08 35 views
18

Przede wszystkim szukałem odpowiedzi na mój problem w kilku tematach i nie mogłem znaleźć rozwiązania, które działałoby z moim kodem.

próbuję uzyskać odpowiedź z serwletu, jeśli pójdę do http://XXXZZZ/Servlet/Login?login=pepe&pass=1234 otrzymuję ważne JSON zgodnie z oczekiwaniami:

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

Ale gdy próbuję samo z $ .ajax, mam 2 błędy .

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

Pierwszy błąd (w oknie popup):

parsererror Error: jQuery17104145435250829905_1336514329291 was not called 

Drugi błąd (w konsoli Chrome):

Uncaught SyntaxError: Unexpected token : Login 1 

(I nie jest JSON czekam).

P.S. Muszę użyć dataType: "jsonp", ponieważ jeśli używam "json", mam również problemy z Cross-Domain.

+0

Jaka jest funkcja błędu? – adeneo

+1

Nie można * wymuszać * JSONP. Musi być obsługiwany i zwracany przez serwer. Jeśli nie, nie masz szczęścia. Jeśli masz kontrolę nad serwerem, upewnij się, że obsługuje on JSONP. –

+0

Programuję również serwer;) –

Odpowiedz

10
succes : function(data){ 

To literówka:

success : function(data){ 
+8

+1 dla oczu orła. – undefined

+0

Nie, przepraszam, że napisałem to źle tutaj, w kodzie swoją pisemną "sukces" –

1

pierwsze masz literówkę w swoim parametrem sukcesu; tęskniłeś za końcem s. Ponadto podczas wykonywania żądania JSONP należy zwrócić informacje JSON w formacie JSONP; który powinien zawierać token wywołania zwrotnego jako część zwracanego ciągu. Ciąg próbka JSONP wyglądałoby to lubi:

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

Spójrz na tej stronie, aby uzyskać więcej informacji na temat specyfikacji jsonp: http://devlog.info/2010/03/10/cross-domain-ajax/

20

Jeśli używasz jsonp następnie składnia jest źle

Ty muszą powrócić

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

a także dodanie opcji ajax żądanie

jsonp: false, 
jsonpCallback: "myJsonMethod" 

tak

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

(i-oczywiście naprawić success jak @voyager zauważyć)

+0

Więc na serwerze muszę zmienić 'statycznego JSONObject logowania (login String, String hasło) wyrzuca JSONException {' do ' static String Login (logowanie ciągowe, hasło String) { ... json.put ("id", id); json.put ("zaloguj się", zaloguj się); json.put ("klucz", klucz); return ("myJsonMethod (" + json + ");"); ' –

+0

@PabloPostigo, możesz użyć klasy [' JSONPObject'] (http://jackson.codehaus.org/1.5.3/javadoc/org/codehaus /jackson/map/util/JSONPObject.html) –

+0

miał podobny problem. dodanie jsonp: false było tym, co naprawiło dla mnie – Luke

Powiązane problemy