Ajax + Jquery Javascript работает очень медленно в Internet Explorer - PullRequest
0 голосов
/ 05 января 2012

На веб-сайте я разрабатываю пользовательский поиск отелей в городе, и результаты возвращаются в формате xml, а затем форматируются с помощью ajax / javascript / jquery.

Результаты отображаются почти сразу в Chrome или FF, но в Internet Explorer (я пробовал ie6 и ie9) результаты отображаются почти минуту.

Запуск инструментов разработчика в IE утверждает, что 99% времени выполнения тратится на функцию "getElementsByTagName", которая вызывается почти 200 000 раз, однако я не знаю, как это исправить, если это проблема.

Страница, о которой идет речь, beta.hotelsweep.com , а функция, вызываемая при поиске:

//summarized version of the function
$.get(url, function (xmlResponse) {
    $('#results').empty();
    var exception = $("Exception", xmlResponse);
    if (exception.size() > 0) {
        var error = "<h2>We were unable to complete your request</h2>";
        $('#results').html(error);
    } else {
        $('#numResults').html($("resultsNumber", xmlResponse).text() + " hotels found <br>");
        var resultsHtml = "<div id='results_list'>";
        //set googlem map to center
        map.setCenter(new GLatLng($("avgLat", xmlResponse).text(), $("avgLong", xmlResponse).text()), 9);

    // Loop through response, creating <li> for each hotel
        $("Hotel", xmlResponse).each(function () {

            var bookLink = $('affiliateLink', this).text();
            var address = $('fulladdress', this).text();
            var stars = $('stars', this).text();
           resultsHtml += 'Hotel Stars: ' + stars;
        });

    //put html into results div
        $('#results').html(resultsHtml);
    }
});

Ответы [ 2 ]

0 голосов
/ 05 января 2012

Оказывается, проблема была связана с режимом документа. В странном режиме javascrit даже не выполнялся полностью.

Добавление этого к началу:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<meta http-equiv="content-type" content="text/html;charset=utf-8"> 

или

 <meta http-equiv="X-UA-Compatible" content="IE=9" />

Сделано, чтобы Internet Explorer выполнялся как ожидалось. Я не до конца понимаю, что происходит, но если вы обнаружите, что ваш JavaScript выполняется неправильно только в IE, это может быть связано с режимом документа.

0 голосов
/ 05 января 2012

Вы не можете действительно решить эту проблему.getElementsByTagName не индексируется в более старых версиях IE.Вместо этого вы можете использовать поиск идентификаторов элементов (избегайте $ ("Exception"), $ ("avgLat") и т. Д.).

Если это невозможно, вы можете добавить на сервер сценарий для отображения результатов вHTML.

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