в jQuery не считается успешным такой ответ:
строка 8124 в jQuery 2.1.0
// Determine if successful
isSuccess = status >= 200 && status < 300 || status === 304;
если поддержка браузеров ниже IE9 не нужна, на чистом JavaScript не намного больше кода будет:
var xhr = new XMLHttpRequest;
xhr.open('POST', url);
xhr.onload = function () {
if (xhr.status == 304) {
onSuccess();
} else {
onError();
}
};
xhr.onerror = onError;
xhr.send(data);