在jquery插件中使用Relative API Url的最佳方法

Ste*_*ieB 9 api url jquery gruntjs

所以我正在使用grunt编写一个jquery插件,在我的插件中我还需要调用webservices.

webservice url域将始终与用户需要为我们的插件添加的.js文件的位置相同.所以即相对

1)包含插件的JS文件

HTTP://mydomain1/js/myfile.js

2)在我的JS调用API URL中

需要是

api_domain: "http://mydomain1/api/v1"
Run Code Online (Sandbox Code Playgroud)

我希望api域相对于我试过的调用它的JS文件的域

api_domain: "/mydomain1/api/v1"
Run Code Online (Sandbox Code Playgroud)

但这会占用浏览器的域名.

所以我想知道实现这一目标的最佳方法是什么

1)使用.NET处理程序从context.request.url插入正确的域名

2)在Grunt构建中为我将部署的每个环境创建一个特定的.js,其中包含JS中的完整URL

3)其他选择?

dem*_*mux 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>
Run Code Online (Sandbox Code Playgroud)

实际脚本:

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

但总的来说,我认为最好保持简单。因此允许用户手动设置服务器的 URL,如下所示:

<script>
    var MY_API_URL = 'https://instance1.myapiserver.foo'
</script>
<script src="/whateverpath/myapiscript.js"></script>
Run Code Online (Sandbox Code Playgroud)

这还允许他们在自己的服务器上托管脚本,甚至出于任何原因代理它。