2014-01-27 4 views
0

У меня есть следующий вызов:Почему JQuery ajax-вызов игнорирует ответ PUT JSON?

var params={type:"PUT", dataType:"application/json; charset=UTF-8", url:"api/servletpat", data:JSON.stringify(dataObject)}; 
$.ajax(params) 
    .done(function(data, status, jqXHR){ 
     successCallback(data); 
    }) 
    .fail(function(jqXHR, status, thrown){ 
     if (jqXHR.status == 200){ 
      successCallback(null); 
     } 
    }); 

Хотя сервер не отправляет ответ JSON, AJAX выполнившего .fail случая с jqXHR.status = 200. Что означает, возвращаемые данные не доступны. Я не могу использовать «GET», потому что GET кодирует представленный объект в URL-адресе, и это неприемлемо. Что мне нужно сделать, чтобы читать возвращаемый объект JSON? Спасибо ...

+3

я бы подумал, что POST будет следующим логическим после GET –

+0

любой ошибки в вашем браузере консоли –

+0

должен быть на стороне сервера ошибка –

ответ

2

Вы определяете недопустимое значение для dataType настройка. Это вызывает обратный вызов .fail для вызова (вместо обратного вызова .done), хотя значение jqXHR.status равно 200. Второй параметр функции обратного вызова .fail (параметр «textStatus») будет "parsererror".

jsfiddle demo that fails

Вы должны иметь:

contentType: "application/json; charset=UTF-8", 
dataType: "json", 

jsfiddle demo that succeeds

С установкой contentType, вы указываете тип содержимого для запроса Ajax. Когда вы устанавливаете dataType на "json", вы сообщаете jQuery, что ответом будет JSON. Это приводит к тому, что jQuery автоматически анализирует ответ на объект (или массив или нуль) перед передачей его в качестве параметра data в функцию обратного вызова .done.

+0

Я, должно быть, перепутал чтение документов (duh). Благодаря :-) – adaj21

0

TYPE должен быть либо GET или POST

+2

Это цитата откуда-то? –

+0

@john Nope.not quote – Makrand

Смежные вопросы