JQuery Ajax Render Фрагменты ИЛИ Целая страница - PullRequest
2 голосов
/ 21 июля 2011

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

Подстановка фрагментов работает нормально, как видно из приведенного ниже my_body_content swap. Беда в том, что я пытаюсь сделать не фрагмент, а целую страницу, как при обмене "телом". На этом этапе страница становится пустой.

Я также хочу сделать что-то подобное с ошибками, возвращаемыми с сервера. Я хочу, чтобы мои хорошие REST 404 сообщения об ошибках отображались на экране, но для устаревшего продукта 404s отображаться на странице 404 устаревшего продукта.

Да, требования к этому проекту странные. Это не проблема, которую я могу исправить.

Вот мой вызов jQuery, имена которого изменены для защиты виновных:

    $.ajax({
    url: "places/things",
    type: "POST",
    data: JSON.stringify(someBadAssObject),
    dataType: "text",
    accepts: "text/html",
    contentType: "application/json; charset=utf-8",
    success: function(x) {
        var fragcheck = $("#my_fragment", x);
        if (fragcheck != null && fragcheck.length > 0)
            $("#my_body_content").html(x);
        else
            $("body").html(x);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        error(errorThrown);
        if (XMLHttpRequest.responseText.startsWith("<html>"))
            $("body").html(XMLHttpRequest.responseText);
    }
});

1 Ответ

3 голосов
/ 21 июля 2011

Хорошо, я думаю, что могу ответить на свой вопрос:

$("body").html(x);

не работает, а

$("html").replaceWith(x);

не работает, и другие перестановки по той же идеетоже не работают.

Это работает:

document.open();
document.write(XMLHttpRequest.responseText);
document.close();

Итак, все решение выглядит так:

$.ajax({
url: "places/things",
type: "POST",
data: JSON.stringify(someBadAssObject),
dataType: "text",
accepts: "text/html",
contentType: "application/json; charset=utf-8",
success: function(x) {
    var fragcheck = $("#my_fragment", x);
    if (fragcheck != null && fragcheck.length > 0)
        $("#my_body_content").html(x);
    else
    {
        document.open();
        document.write(x);
        document.close();
    }
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
    error(errorThrown);
    if (XMLHttpRequest.responseText.startsWith("<html>"))
    {
        document.open();
        document.write(XMLHttpRequest.responseText);
        document.close();
    }
}

});

Надеюсь, это поможет следующему бедному чмо!

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