Избегайте jQuery Mobile для принудительной перезагрузки скрипта / CSS с помощью параметра строки запроса _ = TIMESTAMP - PullRequest
4 голосов
/ 05 марта 2011

Насколько я знаю, если вы хотите загружать файлы JavaScript или CSS вместе с определенной страницей, которая автоматически загружается через ajax, тогда вы должны поместить ссылки CSS / JavaScript в контейнер <div data-role="page">.

Пример:

<div data-role="page" data-theme="e">
  <script type="text/javascript" src="/js/jquery/plugins/plugins.js"></script>

В целом, это работает отлично.Однако где-то по пути URL скрипта изменяется:

/js/some_sepcial_script.js becomes e.g. js/some_sepcial_script.js?_=1299308309681

Где 1299308309681 - текущая метка времени Unix, которая изменяется при каждом запросе и, таким образом, предотвращает кэширование.Я почти уверен, что это предполагаемое поведение, но кто-нибудь знает, как можно запретить добавление метки времени к URL-адресам скрипта / CSS, если вы хотите сделать файл кэшируемым?

Ответы [ 3 ]

3 голосов
/ 05 марта 2011

Вы пробовали:?

$.ajax ({
    // Disable caching of AJAX response */
    cache: false
});

Это должно глобально изменить запросы AJAX. Я просто не уверен насчет внешних скриптов.

[EDIT]

Это исходный код для jquery mobile 1.0a3:

var all = $("<div></div>");
                //workaround to allow scripts to execute when included in page divs
                all.get(0).innerHTML = html;
                to = all.find('[data-role="page"], [data-role="dialog"]').first();

                //rewrite src and href attrs to use a base url
                if( !$.support.dynamicBaseTag ){
                    var newPath = path.get( fileUrl );
                    to.find('[src],link[href]').each(function(){
                        var thisAttr = $(this).is('[href]') ? 'href' : 'src',
                            thisUrl = $(this).attr(thisAttr);

                        //if full path exists and is same, chop it - helps IE out
                        thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' );

                        if( !/^(\w+:|#|\/)/.test(thisUrl) ){
                            $(this).attr(thisAttr, newPath + thisUrl);
                        }
                    });
                }

Ничто там не добавляет кеш, предотвращающий param.

[РЕДАКТИРОВАТЬ 2]

Я знаю, что это выходит за рамки поиска и устранения неисправностей, но вы пытались динамически загрузить js, как описано здесь: http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

(я знаю, что это можно сделать через jQuery, но в целях тестирования я стараюсь избегать jQuery)

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

если я включу jQuery 1.4.3 вместо 1.5, все работает нормально.Это достаточное решение для меня.Еще раз спасибо за вашу поддержку.

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

Попробуйте запустить:

$.ajaxPrefilter("script", function (s) {
    if (s.cache === undefined) {
        s.cache = true;
    }
});

Это меняет это поведение?

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