Подтвердить что ты не робот

Загружать содержимое страницы в переменную

Хороший день.

У меня никогда не было хорошей руки на JavaScript, поэтому этот необычный и простой вопрос.

Как загрузить содержимое страницы в переменную JavaScript с наименьшим количеством кода, без фреймворка и меньшим воздействием на производительность?

Спасибо.


ИЗМЕНИТЬ

Извините, ребята. Я забыл упомянуть: получить содержимое страницы с указанного URL-адреса в JS var.


Следуя Brendan Предложение

Я уже видел альтернативу Брендану в другом месте и пробовал, но в то время это не сработало, и теперь это не работает. Тем временем Firebug и проверенные браузеры (IE8 и FF) не сообщают о какой-либо ошибке. Так что не так?

4b9b3361

Ответ 1

Это модифицированная версия примера, которую вы можете найти в w3schools.com.

<script type="text/javascript">
    function loadXMLDoc(theURL)
    {
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari, SeaMonkey
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                alert(xmlhttp.responseText);
            }
        }
        xmlhttp.open("GET", theURL, false);
        xmlhttp.send();
    }
</script>

Итак, просто создайте example.html для любого типа пути (относительного или абсолютного) на страницу, которую вы хотите загрузить, а xmlhttp.responseText будет строкой, содержащей контент ответа. Вы также можете использовать xmlhttp.responseXML, если хотите, чтобы он был сохранен как проходящий XML-документ. В любом случае, просто назначьте любой из них переменной по вашему выбору, и вы ее получите!

Обратите внимание, что 'loadXMLDoc' не возвращает ничего напрямую, но определяет один из его членов ('onreadystatechange') для выполнения этого задания и делает это только в определенном состоянии (readyState и status). Вывод - не назначать вывод этой функции любому var. Скорее сделайте что-нибудь вроде:

var xmlhttp=false;
loadXMLDoc('http://myhost/mycontent.htmlpart');
if(xmlhttp==false){ /* set timeout or alert() */ }
else { /* assign `xmlhttp.responseText` to some var */ }

Без этого все, что можно увидеть, это "undefined"...

Ответ 2

Чтобы получить все внутри тегов html:

var html = document.getElementsByTagName('html')[0];
var text = html.innerHTML;

Затем вы можете обернуть это в теги html. Не захватывает doctype или что-либо еще, что у вас будет за пределами html-тегов, но это быстрый способ захватить большую часть контента.

Ответ 3

Я знаю, что этот вопрос действительно старый, но у меня была такая же проблема с попыткой получить содержимое страницы в переменную, но, наконец, выяснили способ в Javascript: D (с некоторой помощью из Интернета...)

Итак, вот оно...

Я сделал функцию с обратным вызовом, чтобы получить желаемую страницу:

function getPageContents(callback,url,params) {
    http=new XMLHttpRequest();
    if(params!=null) {
        http.open("POST", url, true);
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    } else {
        http.open("GET", url, true);
    }
    http.onreadystatechange = function() {
        if(http.readyState == 4 && http.status == 200) {
            callback(http.responseText);
        }
    }
    http.send(params);
}

Обратите внимание, что я сделал это таким образом, что он не примет параметры GET. Это намеренно, поскольку мне не нужно использовать GET для моего приложения. Если параметры установлены, они будут отправлены как POST.

Затем, чтобы использовать функцию, скажем, я хочу опубликовать имя в findpersoninfo.php, которое выведет массив JSON этой информации о лицах, я могу сделать это:

getPageContents(function(result) {
    personinfo=JSON.parse(result);
    //Now I can do anything here with the personinfo array
},'http://localhost/findpersoniinfo.php','fname=stretch&lname=wright')

Сделав еще один шаг, вы можете вложить его в другую функцию, назовёв ее getPersonInfo():

function getPersonInfo(fname,lname) {
    getPageContents(function(result) {
        personinfo=JSON.parse(result);
        //Now I can do anything here with the personinfo array
    },'http://localhost/findpersoninfo.php','fname='+fname+'&lname='+lname)
}

Конечно, мои знания Javascript все еще в нем, и приветствуем конструктивную обратную связь: D

Ответ 4

Простое решение для загрузки данных JSON из URL-адреса, такого как /v1/data?format=json:

xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET", "/v1/data?format=json", false);
xmlhttp.send();
var data = JSON.parse(xmlhttp.responseText);