2012-05-14 4 views
4

Мои услуги возвращают 304, но jQuery Ajax, кажется, преобразует его в результат 200 OK.Как получить 304 из jQuery Ajax вместо 200?

Это мой запрос:

$.ajax({  
    url: '/api/items',  
    type: 'GET',  
    dataType: 'json',  
    contentType: 'application/json',  
    ifModified:true,  
    cache: false,  
    statusCode: {  
     304: function() {  
      alert("not modified"); // does not fire 
     }  
    },  

    complete: function (xhr, status) {  
     console.log(xhr.status); // 200 
     }  
    }  
}); 

С Скрипач я могу видеть, что служба возвращает 304 правильно.

Почему jQuery конвертирует его в 200?

+0

возможно дубликат [Как проверьте, является ли заголовок запроса jQuery.ajax() «Состояние 304 не изменено»?] (http://stackoverflow.com/questions/5173656/how-to-check-if-jquery-ajax-request-header-status-is -304-not-modified) – apsillers

ответ

3

Если Вы хотите, чтобы различать между ними, используйте success(data, textStatus, jqXHR) событие и прочитать его из jqXHR.status

или доступ jqXHR другой путь:

var jqxhr = $.ajax(
    ...  
    statusCode: {  
     200: function() {  
      if(304 == jqxhr.status) 
       alert("not modified"); // does not fire 
     }  
    },  
) 

Proper way to handle 304 not modified in jQuery ajax

редактировать

дополнительный ajax() установка:

ifModified:true, // Lets respond `304:notmodified` 

но он ломает réponse данные:

http://forum.jquery.com/topic/how-to-fix-browser-cache-and-notmodified-respond-for-json-jquery-ajax-ifmodified-true-break-on-data-respond

но Вы использовали его, и он все еще работает по-другому: -/

+0

Он по-прежнему возвращает 200. –

+0

какая версия jQuery и какой браузер? –

+0

1.7.2/Последняя версия Chrome Chrome/последняя версия Firefox –

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