Загрузите HTML, используя путь загруженного документа в качестве корневого для его относительных путей вместо пути исходного документа - PullRequest
3 голосов
/ 20 декабря 2011

Ну, у меня есть что-то вроде этого,

<html>
<head>
   <script src="jquery.js" type="text/javascript"></script>
</head>
<body>
   Loading your content...
</body>
<script type="text/javascript">
    var xmlhttp;
    if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            $("body").html(xmlhttp.responseText);
        }
    };

    xmlhttp.open("GET","../stats.phtml",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send();
</script>
</html>

И он не нашел никаких внешних документов, связанных в загруженном документе stats.phtml (источники javascript и css), потому что путь для относительных путейэто путь к документу, а не корневой путь загруженного документа.

Мне нужно сделать это на AJAX (предполагается, что страница загрузки выполняет сценарий во время загрузки содержимого и показывает его послеПрошло 3 секунды), поэтому просто делать window.location = '.. / stats.phtml' после 3 секунд не является хорошим решением.Я также хотел бы сохранить относительные ссылки в загруженном документе, а не перемещать их в абсолютные.Есть предложения?

1 Ответ

2 голосов
/ 20 декабря 2011

Я узнал, прочитав эту статью для разработчика Mozilla , что html5 window.history.pushState можно использовать перед заменой, например:

if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
    var stateObj = { foo: "stats" };
    window.history.pushState(stateObj, "Title", "../stats.phtml");
    $("body").html(xmlhttp.responseText);
}

Что достаточно справедливо дляЯ.

В противном случае, я прочитал # отметки могут быть использованы для идентификации документов и переключения одного URL-адреса на другой без перезагрузки (в сочетании с некоторыми заклинаниями Apache modrewrite для изменения обозначения # на фактические каталоги на сервере,Похоже).Если вы точно знаете, как, любой пример, использующий этот подход, был бы оценен.

update Я работал над этим в течение некоторого времени, и я нашел альтернативу не jquery, которая заменяет весьсодержание документа и подходит мне лучше в этом случае.

if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        var stateObj = { foo: "stats" };
        window.history.pushState(stateObj, "Title", "../stats.phtml");
        document.open('text/html');
        document.write(xmlhttp.responseText);
        document.close(); // don't forget to do this, or you'll be in trouble!
    }

Наслаждайтесь!

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