Получение кода состояния без использования языка на стороне сервера (возможно, JavaScript) - PullRequest
2 голосов
/ 23 мая 2009

Я создал службу, которая помогает обрабатывать страницы ошибок в веб-приложениях с помощью фрагмента кода, который копируется / вставляется в шаблоны страниц ошибок (например, Google Analytics). Код состояния установлен на скрытый ввод в коде установки. Проблема в том, что я не хочу, чтобы код установки зависел от языка на стороне сервера (например, PHP, Ruby), - но приложение действительно может действительно использовать динамический метод сбора кода состояния в запросе http без необходимости жестко закодированные коды состояния и, следовательно, необходимость отдельных кодов установки для каждой страницы ошибки (хотя, на самом деле, мы рассматриваем только 500 и 404; но, насколько мне известно, одного варианта слишком много).

Тестирование Google и моих друзей-разработчиков показывает, что получить код состояния с помощью javascript будет невозможно (хотя мы получаем http_referer таким образом), но мне было интересно, есть ли у кого-нибудь какие-либо предложения, которые я не пришел еще через ...

Ответы [ 4 ]

2 голосов
/ 22 ноября 2009

Нет способа получить доступ к коду статуса HTTP из HTML-страницы или из функции JavaScript. XMLHttpRequest может получить к нему доступ, потому что он знает о запросе Http, который он создал самостоятельно. Во-первых, он является инициатором HTTP-соединения. Но код JavaScript, который вы хотите запустить, содержится на странице, которая уже была загружена.

Кстати, в любом случае это будет смешивать слои (например, транспортный уровень и прикладной уровень). Например, поскольку вы можете загрузить страницу .html из файловой системы - какой код статуса HTTP в этом случае? Или что такое код состояния HTTP, если вы обращаетесь к HTML-странице с FTP-сервера или из репозитория SVN?

1 голос
/ 22 ноября 2009

Насколько я знаю, нет способа выяснить код состояния самой страницы, используя код, встроенный в эту страницу. (Ajax-запрос к URL вернет код состояния, поэтому теоретически вы могли бы выполнить Ajax-запрос к странице, на которой вы находитесь (т. Е. Дважды), но это немного странно, если вам нужно делать это при каждой загрузке страницы. ...)

Я думаю, что единственное решение состоит в том, чтобы сделать так, как вы предлагаете, и изменить обработчики на стороне сервера 404, 500 и т. Д. Для встраивания информации о коде состояния в саму страницу (например, <script>document.status = "404";</script>), которую затем можно извлечь с JavaScript.

1 голос
/ 24 мая 2009

С помощью XmlHttpRequest вы можете просто извлечь содержимое текстового / простого файла, расположенного на вашем сервере, который будет независим от используемого вами языка сервера.

Это может быть текстовый файл со значениями, разделенными запятыми или точками с запятой, которые вы разделите после выполнения запроса.

Примечание. Вам нужно будет использовать свойство responseText XmlHttpRequest.

Надеюсь, я достаточно ясен.

0 голосов
/ 25 мая 2009

Нил.

Вот код для уточнения.

function createXhrObject()
{
    if (window.XMLHttpRequest)
        return new XMLHttpRequest();

    if (window.ActiveXObject)
    {
        var names = [
            "Msxml2.XMLHTTP.6.0",
            "Msxml2.XMLHTTP.3.0",
            "Msxml2.XMLHTTP",
            "Microsoft.XMLHTTP"
        ];
        for(var i in names)
        {
            try{ return new ActiveXObject(names[i]); }
            catch(e){}
        }
    }
    return null; // not supported
}
xhr = createXhrObject();

xhr.onreadystatechange = function() 
{
    if(xhr.readyState == 4 && xhr.status == 200) 
    {
        document.getElementById('your_hidden_input').value = xhr.responseText;
    } 
}

xhr.open('GET', 'your_text_file.txt', true); 
xhr.send(null); 
...