$.ajax и JSONP. ParseError и Uncaught SyntaxError: Неожиданный токен:
Прежде всего, я искал ответ на свою проблему в нескольких темах, и я не мог найти решение, которое работает с моим кодом.
Я пытаюсь получить ответ от сервлета, если я перейду к http://XXXZZZ/Servlet/Login?login=pepe&pass=1234
, я получаю действительный JSON, как ожидалось:
{"id":3,"login":"pepe","key":"0D1DBA4BE87E02D43E082F9AA1ECFDEB"}
Но когда я пытаюсь сделать то же самое с $.ajax, я получаю 2 ошибки.
$.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);
}
});
Первая ошибка (во всплывающем окне):
parsererror Error: jQuery17104145435250829905_1336514329291 was not called
Вторая ошибка (в консоли Chrome):
Uncaught SyntaxError: Unexpected token : Login 1
(И есть JSON, которого я жду).
P.S. Я должен использовать dataType: "jsonp", потому что, если я использую "json", у меня также возникают проблемы с кросс-доменом.
Ответы
Ответ 1
Если вы используете jsonp, тогда синтаксис неверен
Вам нужно вернуть
myJsonMethod({"id":3,"login":"pepe","key":"0D1DBA4BE87E02D43E082F9AA1ECFDEB"});
а также добавьте в свои параметры запроса ajax
jsonp: false,
jsonpCallback: "myJsonMethod"
так
$.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);
}
});
(и, конечно, зафиксируйте success
как @voyager)
Ответ 2
succes : function(data){
Это опечатка:
success : function(data){
Ответ 3
Сначала у вас есть опечатка в параметре успеха; вы пропустили финал s. Кроме того, когда вы выполняете запрос JSONP, вам необходимо вернуть информацию JSON в формате JSONP; который должен включать токен обратного вызова как часть возвращаемой строки. Пример строки JSONP будет выглядеть так:
yourcallbacktoken({"id":3,"login":"pepe","key":"0D1DBA4BE87E02D43E082F9AA1ECFDEB"})
Взгляните на эту страницу для получения дополнительной информации о спецификациях JSONP: http://devlog.info/2010/03/10/cross-domain-ajax/