Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.01.2016, 14:33
Интересующийся
Отправить личное сообщение для kosuha606 Посмотреть профиль Найти все сообщения от kosuha606
 
Регистрация: 30.08.2015
Сообщений: 12

Получить путь к выполняемому сценарию JS jQuery
Здравствуйте, кто-нибудь может подсказать как получить абсолютный путь к скрипту JS, внутри этого же скрипта?

Я столкнулся вот с такой проблемой
var lang = 'ru';
var resJSON = [];

$.getJSON('lang/'+lang+'.json',function(data) {
   resJSON = data;
});

В этом коде я хочу получить настройки из JSON файла, чтобы настроить плагин, точнее сделать локализацию. Но как я понимаю getJSON работает только с абсолютными url адресами, а я не могу заранее знать в какой дирректории будет размещен плагин. Вот я и подумал, что эту проблему можно решить если получить абсолютный путь к текущему выполняемому скрипту, или есть другие способы???
Ответить с цитированием
  #2 (permalink)  
Старый 25.01.2016, 15:11
Интересующийся
Отправить личное сообщение для kosuha606 Посмотреть профиль Найти все сообщения от kosuha606
 
Регистрация: 30.08.2015
Сообщений: 12

Погуглил поискал, видимо эта проблема никак не решается средствами JS, даже в reuireJS, нужно укзаывать baseUrl, так и я могу сделать, просто заставить клиента указать где лежит плагин...
Ответить с цитированием
  #3 (permalink)  
Старый 25.01.2016, 15:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от kosuha606
Но как я понимаю getJSON работает только с абсолютными url адресами
Адрес не может быть относительным или абсолютным, а путь может быть, и для Ajax запроса можно указывать как абсолютные пути, так и относительные, имея ввиду относительно корня документов или текущей страницы (исполняемого файла).

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

Последний раз редактировалось laimas, 25.01.2016 в 15:26.
Ответить с цитированием
  #4 (permalink)  
Старый 25.01.2016, 15:35
Интересующийся
Отправить личное сообщение для kosuha606 Посмотреть профиль Найти все сообщения от kosuha606
 
Регистрация: 30.08.2015
Сообщений: 12

Да, конечно можно использовать переменные, и я так и сделал сейчас, именно клиент при вызове плагина задает параметр baseUrl, при конфигурации плагина.

Мне казалось, что при локализации datepicker, этот плагин подгружает локализацию но я покапался в его коде и понял, что локализация ему передается в виде объекта через метод setDefaults, и потом смешивается с текущей конфигурацией плагина, можно и так сделать локализацию.
Ответить с цитированием
  #5 (permalink)  
Старый 25.01.2016, 16:14
Интересующийся
Отправить личное сообщение для kosuha606 Посмотреть профиль Найти все сообщения от kosuha606
 
Регистрация: 30.08.2015
Сообщений: 12

Сделал метод, который устанавливает текущий язык плагина, и в этом методе можно передать базовый путь для загрузки языковых файлов в формате JSON, вроде бы выглядит не плохо
jQuery(document).formFilter.setLang({
                lang: "ru",
                baseUrl: '/lpu/js/formFilterPlugin/'
            });

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

Вот как пример http://atcoding.ru/lpu/
Ответить с цитированием
  #6 (permalink)  
Старый 25.01.2016, 16:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от kosuha606
baseUrl: '/lpu/js/formFilterPlugin/'
Это относительный путь, и если "не знать каким он будет", то изменение каталога на сервере потребует изменение пути и в методе, то есть переписать руками. Если же плагин положен в произвольный каталог, а его ресурсы в каталогах этого каталога и их имена не изменяются, то можно и на клиенте найти папку расположения каталога из текущего url, ну и соответственно каталоги ресурсов.
Ответить с цитированием
  #7 (permalink)  
Старый 25.01.2016, 16:41
Интересующийся
Отправить личное сообщение для kosuha606 Посмотреть профиль Найти все сообщения от kosuha606
 
Регистрация: 30.08.2015
Сообщений: 12

Сообщение от laimas
Это относительный путь
Если честно, я может немного подзабыл, но если путь начинается со / - то он будет от корневой дирректории сайта начинаться, то есть это абсолютный путь, хотя конечно я могу и ошибаться.

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

Сообщение от laimas
и на клиенте найти папку расположения каталога из текущего url
А вот это можно немного пояснить, по поводу текущего url.
Извиняюсь если я немного затупливаю!
Ответить с цитированием
  #8 (permalink)  
Старый 25.01.2016, 16:59
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

/ - да, это от корня, и указание src="/path/file.ext", это как раз относительный путь от корня документов сайта. Иногда нужен и абсолютный путь, и он будет возвращен как src="X:/path/file.ext", где Х имя диска и т.д. Данный путь в url не подставляется, а будет использован полный путь - протокол/домен/имя файла. Это и есть понятие "абсолютного url". Но браузер в любом случае будет обращаться по абсолютному url, даже есть путь указан относительный, протокол/домен браузером будет подставляться автоматически. То есть по сути "относительный url" понятие тоже чисто относительное на клиенте, в отличие от сервера оперирующего и тем, и другим понятием.

А как узнать из текущего url, это получить src скрипта. Зная имя каталога плагина (если оно может изменяется, то должно быть в конфигурациях, вот тут и удобны переменные), а каталоги его ресурсов, это содержимое каталога плагина, не сложно получить из src путь, достаточно отбросить имя файла скрипта из него, а оно последнее в пути, и подставить каталог ресурсов.

Последний раз редактировалось laimas, 25.01.2016 в 18:08.
Ответить с цитированием
  #9 (permalink)  
Старый 25.01.2016, 17:06
Интересующийся
Отправить личное сообщение для kosuha606 Посмотреть профиль Найти все сообщения от kosuha606
 
Регистрация: 30.08.2015
Сообщений: 12

Да я Вас понял, спасибо. Я как то и не подумал о том, что можно просто перебрать подключенные скрипты и получить оттуда путь, как раз то что нужно!
Ответить с цитированием
  #10 (permalink)  
Старый 25.01.2016, 17:49
Интересующийся
Отправить личное сообщение для kosuha606 Посмотреть профиль Найти все сообщения от kosuha606
 
Регистрация: 30.08.2015
Сообщений: 12

В результате у меня появилась вот такая функция
function buildScriptPath() 
    {
        var pluginNameRe = /formFilterPlugin/;
        var scripts = document.scripts;
        var pathname = window.location.pathname;
        var pluginSrc = null;
        
        for(var i=0;i<scripts.length;i++) 
        {
            var src = $(scripts[i]).attr('src');            
            if(typeof(src)!=='undefined') {
                if(pluginNameRe.test(src)) {
                    pluginSrc = src;
                }
            }
        }
        var splitted = pluginSrc.split('/');
        var path = pathname;
        // Не учитываем последнее значение
        for(var j=0;j<splitted.length-1;j++) {
            path += splitted[j]+'/';
        }
        return path;
    }

И в вызове клиент теперь может не указывать baseUrl, хотя эту возможность я оставил на всякий случай.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery получить дату Add-Aware jQuery 4 30.01.2011 20:05
Как в jQuery получить доступ к фрейму или самому верхнему окну? Neokortex jQuery 7 20.12.2010 10:38
jQuery, load: замена элемента вырубает js на странице. warobushek AJAX и COMET 0 08.10.2010 07:44
Вакансия: Front-end разработчик (HTML, CSS, JS, Ajax, jQuery) ivankov Работа 0 05.10.2010 19:00
jquery - Как получить полный путь? kirill.adw jQuery 5 20.11.2009 17:40