JQuery / AJAX - Как загрузить несколько Div и заголовок страницы? - PullRequest
0 голосов
/ 13 сентября 2011

Я попробовал этот код (он работает, но когда мы нажимаем 3-4 раза, мой браузер зависает, возможно, из-за огромных переменных):

var elements = [ "content", "menu" ];
$.get(
    url,
    function(data)
    {
        // Elements
        var resp = $("<div></div>").html(data);
        $.each(
            elements,
            function(i, v)
            {
                var content = resp.find("#"+v);
                $("#"+v).html(content);
            }
        );
        // Title
        var regexp = /<title>(.*)<\/title>/i;
        document.title = data.match(regexp)[1];
        // Change URL
        history.pushState({ page: url }, url, url);
        // Hiding loading div
    }
);

Протестировано на Firefox 6.0, Chrome и Safari 5...

Я думаю, что могу использовать функцию .load (), но я не могу загрузить несколько делений только с одной загрузкой ...

И следующий код не работает:

var resp = $("<div></div>").load(url+" #content, #menu");
var content = resp.find("#content");
$("#content").html(content);
var menu = resp.find("#menu");
$("#menu").html(menu);

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 16 сентября 2011

Я нашел ключ к решению моей проблемы ...

Добавив 'time ()' (функцию PHP) в div #menu, я заметил, что иногда jQuery загружает страницу несколько раз безЛюбая причина: именно поэтому мой браузер тормозит при загрузке ...

Кто-нибудь знает, как решить эту проблему?

Спасибо.

РЕДАКТИРОВАТЬ: Я думаю, что я решил свою проблему!Я не блокирую этот вопрос, пока не буду уверен в этом:)

Проблема заключалась в использовании нескольких идентификаторов, таких как:

<div id="content">
    <div id="content">
    </div>
</div>

Когда я загружал свой контент.Итак, теперь код:

$.get(
    url,
    function(data)
    {
        // Elements
        //var resp = $("<div></div>").html(data); <-- EDIT
            var resp = $(data);
        $.each(
            elements,
            function(i, v)
            {
                var content = resp.find("#"+v).html(); // HERE IS THE CHANGE, I ADDED .html()
                $("#"+v).html(content);
            }
        );
        // Title
        var regexp = /<title>(.*)<\/title>/i;
        document.title = data.match(regexp)[1];
        // Change URL
        history.pushState({ page: url }, url, url);
        // Hiding loading div
    }
);
0 голосов
/ 13 сентября 2011

включить кеш

$.ajaxSetup({
  cache: true,
});

остальной код как есть

var elements = [ "content", "menu" ];
$.get(
    url,
    function(data)
    {
        // Elements
        var resp = $("<div></div>").html(data);
        $.each(
            elements,
            function(i, v)
            {
                var content = resp.find("#"+v);
                $("#"+v).html(content);
            }
        );
        // Title
        var regexp = /<title>(.*)<\/title>/i;
        document.title = data.match(regexp)[1];
        // Change URL
        history.pushState({ page: url }, url, url);
        // Hiding loading div
    }
);
...