【问题标题】:Absolute URL when calling wcf method using ajax使用 ajax 调用 wcf 方法时的绝对 URL
【发布时间】:2012-10-19 07:16:43
【问题描述】:

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

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

 $(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"

【问题讨论】:

  • 你试过只用 url: "/Services/ForumOperationService.svc/GetTags",
  • 是的,我试过 :-) 给我一个 404 电话(我会更新帖子)

标签: jquery asp.net ajax json absolute-path


【解决方案1】:

如果您的应用程序始终位于同一位置,请使用绝对路径 ("/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/HackedByChinese/tRMSj/

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 2012-03-05
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多