1

这可能很简单,但我已经被困了一段时间。

我有一个用户控件,它正在调用这样的方法:

 $(document).ready(function () {
        $("#myabtags").tagit({
            tagSource: function (request, response) {
                $.ajax({
                    type: "POST",
                    url: "Services/ForumOperationService.svc/GetTags",
                    datatype: "json",
                    contentType: "application/json; charset=utf-8",
                    data: '{"prefix":"' + request.term + '"}',
                    success: function (data) {
                        response(data.GetTagsResult);
                    }
                });
            }
        });
    });

但是,此用户控件在我的网站上的多个地方使用。例如在 root、/Admin/ 和其他几个。

我想做类似的事情:

url: "~/Services/ForumOperationService.svc/GetTags"

你如何在 jQuery 中做到这一点?

尝试

把斜线放在前面,比如

url: "/Services/ForumOperationService.svc/GetTags"

那是行不通的。我收到一个 404 错误:http://localhost:16481/Services/ForumOperationService.svc/GetTags" (gives 404).

相反,它应该是

http://localhost:16481/Client/Services/ForumOperationService.svc/GetTags"
4

2 回答 2

2

如果您的应用程序始终位于同一位置,请使用绝对路径 ( "/Services/ForumOperationService.svc/GetTags")。但是,如果您将相同的代码库部署到可能具有不同根路径的多个站点,我会使用这个技巧:

它的工作原理是这样的:我假设我的应用程序的所有 JS 脚本都在一个文件夹中,例如Scripts. 然后,我有一个具有实用程序的通用 JS 文件,包括一个保存绝对根 URL 的位置和一个创建绝对 URL 的方法。然后我使用该 src 搜索脚本块,并提取根 URL。

(function($)
{
    $.myapp = {};
    var $a = $.myapp;

    $.extend($a, {
        rootUrl: '',
        makeAbsoluteRootPath: function(path) {
            return path.replace('~/', $a.rootPath);
        }
    });

    var tag = $('script[src*="scripts"]').first();
    if (tag.length > 0) {
        var url = tag.attr('src').replace(/\/?(scripts).+$/i, '/');
        $a.rootPath = url;

    }

})(jQuery);

现在您可以动态解析绝对根路径:

url: $.myapp.makeAbsoluteRootPath("~/Services/ForumOperationService.svc/GetTags");

http://jsfiddle.net/HakedByChinese/tRMSj/

于 2012-10-29T23:11:15.827 回答
1

要使路径相对于网站客户端的根目录,请在前面加上一个斜杠:

url: "/Client/Services/ForumOperationService.svc/GetTags"

注意 - 如果Client是 IIS express 中的虚拟目录/应用程序,并且安装时它没有Client位,则需要更改它。

于 2012-10-29T22:48:04.170 回答