Как отобразить ответ с ошибкой (текст / html) на запрос AJAX / getJSON?

Моя ситуация такова, что я разрабатываю небольшое веб-приложение, в котором сервер предоставляет динамические ответы JSON. Сервер построен на Cherrypy. Иногда в коде, создающем данные JSON, возникает ошибка, которая выдает, а cherrypy улавливает ее и возвращает ошибку 500 с полной HTML-страницей с подробным описанием исключения. (То есть в ответе есть все: ... ... ) Но поскольку это запрос AJAX, он не отображается.

Я могу достаточно легко перехватить эту ошибку и посмотреть на нее в инструментах разработчика; но я бы хотел (для облегчения отладки) открыть новую страницу (как если бы пользователь перешел по ссылке) и отобразить этот ответ в браузере. Я пробовал

window.open('', '_self');
$(document).html(jqXHR.responseText);

, но получаю пустую страницу. Полагаю, я мог бы сохранить текст ошибки и передать его во втором запросе к серверу, но есть ли более чистый способ?


В заключение, последний сработавший код был следующим:

.error(function(jqXHR, textStatus, errorThrown) {
    $(window).bind('unload', function() { document.write(jqXHR.responseText); } );
    var win = window.open('', '_self');
    return false;
});

Не уверен, что этот последний return false необходимо, но кажется хорошим тоном.


И снова: приведенный выше код надежно работал в Opera. Я думал, что видел, как это работает и в Webkit, но начал замечать, что это не так; и при дальнейшем тестировании он не работал и для Firefox.

Я обнаружил, что работало на всех трех платформах:

document.open('text/html', true);
document.write(jqXHR.responseText);
document.close();

Не нужно открывать другое окно или связывать события; просто снова откройте документ и вставьте туда текст.


Ну, вот и я снова. Вышеупомянутый метод либо перестал работать, либо я споткнулся, когда сказал, что он вообще работал. В частности, в Chrome, похоже, не определен document.open .

Но! Я только что нашел изящный метод, который, кажется, работает везде:

errtext = 'data:text/html;base64,' + window.btoa(jqXHR.responseText);
window.open(errtext, '_self');

Он просто преобразует ответ в полностью автономный URL-адрес data: и открывает его в окне.

8
задан Mike C 6 February 2012 в 01:16
поделиться