Как загрузить страницу синхронно, используя jQuery - PullRequest
2 голосов
/ 19 марта 2011

В настоящее время я использую jQuery для выбора того, что должна загружать моя страница индекса, в зависимости от того, установлен ли файл cookie.

Например, тег body файла index.html должен загружать hasCookie.html, если файл cookie установлени noCookieSet.html, если cookie не установлен.

Моя страница индекса в настоящее время имеет:

load user scripts
load styling scripts

<html><body></body></html>

В пользовательском сценарии есть код, который проверяет, установлен ли cookie.Если это так, я использую загрузку jQuery для загрузки содержимого в тело:

$(document.body).load('hasCookie.html')

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

Есть ли способ получить синхронную загрузку, или я должен подходить к этому неправильно?

РЕДАКТИРОВАТЬ: если это помогает, сценарии стилей в основном jQueryUI

Ответы [ 6 ]

9 голосов
/ 19 марта 2011

AFAIK, загрузка JQuery не может быть синхронной.

Вы можете обходить это с помощью функции обратного вызова.

$(document.body).load('hasCookie.html', function(){
//call styling script here
});
2 голосов
/ 19 марта 2011

В вашем случае это звучит так, как будто было бы лучше реализовать серверную часть, если это возможно.В PHP было бы просто определить, установлен ли нужный файл cookie в массиве $ _COOKIE и вывести правильную страницу.

1 голос
/ 19 марта 2011

Просто замените document.location.href на URL страницы.

То, что вы делаете, загружаете контент с помощью ajax и размещаете его в теле страницы.Вы сделали бы это, если бы не хотели, чтобы любые ресурсы, объявленные в голове, запрашивались.Но в этом нет никакого смысла, поскольку вы можете сделать это с помощью кэширования.

1 голос
/ 19 марта 2011

Вы можете сформировать его как запрос AJAX и заполнить свою страницу ответом.Установите асинхронную опцию в false.Этот SO-ответ имеет больше: Как я могу заставить jQuery выполнять синхронный, а не асинхронный Ajax-запрос?

0 голосов
/ 19 марта 2011

Вот как я это делаю.

Вы можете присоединить Style и Javascript при обратном вызове из функции Ajax.

  $.ajax({
    url: somePage,
    success:function(ajaxData){

                        //ATTACH AND RUN CORRESPONDING PAGE SCRIPT
                        var script = somePage + '.js';
                        $.getScript(script);



                        //ATTACH CORRESPONDING STYLE SHEET
                        var style = document.createElement('link');
                        style.type = 'text/css';
                        style.href = '/css/'+somePage+'.css';
                        style.rel = 'stylesheet';
                        style.media = 'screen';

                        document.getElementsByTagName('head')[0].appendChild(style);

                       //ADD HTML RETURNED
                       $('body').html(ajaxData);      


});

Это позволяет загружать все, включая стили и javascript, учитывая, что имя скрипта и имя файла css совпадают.

0 голосов
/ 19 марта 2011

Попробуйте

$(document).ready(function() { $(document.body).load('hasCookie.html'); });

Это откладывает загрузку до тех пор, пока все остальное уже там.

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