2015-06-04 2 views
9

Так что я пишу плагин jquery с использованием grunt, а в моем плагине мне также нужно вызвать webservices.лучший способ использования Относительный API-адрес в jQuery Plugin

URL-адрес домена webservice всегда будет тем же самым доменом, что и адрес .js-файла, который пользователь должен добавить для нашего плагина. Таким образом, то есть относительная

1) Включите JS файл для плагина

http://mydomain1/js/myfile.js

2) В моей JS вызова API URL

должен быть

api_domain: "http://mydomain1/api/v1" 

И я хочу АНИ домен должен относиться к домену файла JS, вызывающего его Я пытался сделать

api_domain: "/mydomain1/api/v1" 

Но это подбирает доменное имя браузера.

Так мне было интересно, что лучший способ достичь этого

1) Используйте .NET Обработчик вставить доменное имя из context.request.url

2) В Грунта строят создать конкретный .js для каждой среды, в которой будет развернуто, с полным адресом в JS

3) Другие варианты?

+0

Все клиентские решения немного опасны/хрупки. Я бы рекомендовал решения на стороне сервера, которые вы сами предложили; визуализируйте файл javascript на каждом сервере приложений и дайте клиенту получить твердое значение. – Brian

ответ

3

Ну, на самом деле у вас есть сценарий, который может найти собственный источник, используя jquery. Просто убедитесь, что для js-файла достаточно уникальное имя.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://rawgit.com/demux/4d4ce440d7c379305a9a/raw/findfilehosttest.js"></script>

Actual Сценарий:

$(function(){ 
    var url = $("script[src$='findfilehosttest.js']").attr('src') 
    var matches = url.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i) 
    var domain = matches && matches[1] 
    alert(domain) 
}) 

Но в целом я считаю, что лучше держать его просто. Таким образом, позволяют пользователю установить URL сервера вручную, например, так:

<script> 
    var MY_API_URL = 'https://instance1.myapiserver.foo' 
</script> 
<script src="/whateverpath/myapiscript.js"></script> 

Это также позволит им провести скрипт на свой собственный сервер, или даже прокси это для того, что когда-либо причине они могли бы иметь.

1

Будет ли ваш JS-файл находиться в том же домене, что и веб-страница? В этом случае просто используйте window.location.host в своем плагине, чтобы получить «http://mydomain».

+0

Нет, этого не будет, мы будем размещать файл JS, и он может отправляться на любой пользовательский сайт. – StevieB

+0

Но ваш скрипт будет развернут в разных средах?(Если бы это было не так, вы бы жестко указали доменное имя в скрипте, быстро и грязно ...). –

0

Вы пытались сделать это в своем JS-файле?

var api_version = "v1"; 
var api_domain = (function() { 

var scripts = document.getElementsByTagName('script'); 
var script = scripts[scripts.length - 1]; 
var domain; 

if (script.getAttribute.length !== undefined) { 
    domain = script.src; 
} else { 
    domain = script.getAttribute('src', -1); 
} 

domain = domain.split('/'); 
domain.pop(); 
domain = domain.join('/'); 

var tmp = document.createElement('a'); 
tmp.href = domain; 

var port = tmp.port !== "80" ? ":" + tmp.port : ""; 

return tmp.protocol + '//' + tmp.hostname + port + '/api/' + api_version; 

}()); 

Вы будете иметь на api_domain вашего требуемого значения.

 Смежные вопросы

  • Нет связанных вопросов^_^