Конвертировать AJAX в не AJAX вызов при ошибке - PullRequest
0 голосов
/ 09 апреля 2011

Скажем, если сервер возвращает 500-страничную страницу при вызове Ajax вместо обычного успешного содержимого, я хочу загрузить эту страницу ошибки, загруженную так, как если бы это был вызов не-ajax.

Я не хочу ни перенаправления, ни перезагрузки, потому что Werkzeug предоставляет отличный отладчик, который я хотел бы использовать, но поскольку страница отладки отправляется обработчику Ajax, я не знаю, как загрузить эту страницу. Я не могу перенаправить на общую страницу, потому что тогда данных об ошибках не будет, и я не хочу делать второй вызов, потому что они представляют собой POST, которые могли изменить состояние, поэтому второй вызов может не возвращать то же самое трассировка стека / ошибка в качестве первого вызова.

Самое близкое, что я получил:

$( "body" ).ajaxError(function(e, jqxhr, settings, exception) {
    $('html').html(jqxhr.responseText);
});

Что почти работает, за исключением того, что Javascript страницы не загружен.

Ответы [ 2 ]

1 голос
/ 09 апреля 2011

Вот мое решение, использующее iFrame - я загружаю ту же страницу (в случае успеха, но вы можете сделать это и в случае ошибки) и при загрузке, на странице отобразится предупреждение и войдет вконсоль, чтобы показать, что скрипты в ответном HTML работают.Я проверил это, используя FF4 и Chrome.

Это основная функция (кредит: http://www.tek -tips.com / viewthread.cfm? Qid = 1021687 )

function loadFrame(frameId, text){
    var ifrm = document.getElementById(frameId);
    ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument;
    ifrm.document.open();
    ifrm.document.write(text);
    ifrm.document.close();
}
  • Недостаток, который я могу себе представить при использовании этого метода, заключается в том, что если HTML-код ответа имеет код перебора кадров или если по какой-то причине он зависит от значения window.location, это, скорее всего, приведет к ошибке.

  • OTOH, преимущество в использовании iframes по сравнению с использованием метода .html(), как предлагает herostwist, заключается в том, что .html() использует собственное свойство браузера innerHTML и т. Д.поведение становится специфичным для браузера;браузер может убрать script или head, что, вероятно, не поможет вам в отладке.Кроме того, если на вызывающей странице и странице ответа имеются элементы с одинаковым идентификатором, вы можете обнаружить, что обработчики событий не привязываются к элементам страницы ответа.Но если эти случаи не применимы к вашей ситуации, этого тоже должно быть достаточно.

0 голосов
/ 09 апреля 2011

Согласно документации jquery ajax, если установить тип данных html «Возвращает HTML в виде простого текста; включенные теги сценария оцениваются при вставке в DOM».поэтому ваш метод должен работать, если вы заставите тип данных в HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...