在Visual Studio C#中,是否有一种方法可以将Web Config Transforms应用于Javascript文件?

6
在Visual Studio中,我有一些JavaScript代码在正在开发的网站上。在调试时,我使用$ajax调用“localhost”。当部署时,需要使用实际服务器。
$('#textInput_UserName').focusout(function () {
    var _username = $('#textInput_UserName').val();
    $.ajax({
        url: 'http://localhost:8809/Account/UserNameExists/',
        data: { username: _username },
        dataType: 'html',
});

当我发布时,需要将本地主机地址转换为实际域名:
$('#textInput_UserName').focusout(function () {
    var _username = $('#textInput_UserName').val();
    $.ajax({
        url: 'http://www.mydomain.com/Account/UserNameExists/',
        data: { username: _username },
        dataType: 'html',
});

有没有一种类似Web配置转换的简单/自动化方法来完成这个任务呢?
非常感谢!

你不能从配置中注入这个值到JS吗? - Oded
@Oded- 谢谢,我不确定你的意思。你是怎么做到的? - Hairgami_Master
我认为你可以为你的项目使用后构建事件。[链接]http://msdn.microsoft.com/en-us/library/42x5kfw4%28v=vs.80%29.aspx我建议在js中使用全局变量,例如domainUrl,并在您的js文件中使用它来创建url url: domainUrl + '/Account/' - cycaHuH
实际上,您可以创建一个包含每个配置设置的.js文件。然后,只需使用web.config转换让系统知道应该使用哪个.js文件即可。 - cycaHuH
@cycaHuH 你有任何例子吗? - Kien Chu
3个回答

3
你不需要填写主机名,浏览器会自动填写,示例如下:
$('#textInput_UserName').focusout(function () {
    var _username = $('#textInput_UserName').val();
    $.ajax({
        url: '/Account/UserNameExists/',
        data: { username: _username },
        dataType: 'html',
});

如果您实际上是在谈论跨域请求,那么只需设置全局js站点变量即可。

哈!你是认真的吗?我真是个白痴!虽然还很好奇是否可能适用于其他情况,但非常感谢! - Hairgami_Master
是的!这几乎是你忘记需要告诉别人的事情之一... 它遵循与img src等类似事物相同的规则,因此您可以使用绝对或相对路径。 - mattmanser
1
好的解决方案,但对于像 API URL 这样的东西可能不起作用,因为它可能会根据环境指向完全不同的服务器。 - Zero3

1
我建议您使用这个:
url: '<%= ResolveClientUrl("~/Account/UserNameExists/")',

如果您按照以下方式操作,就能避免出现问题:

  • 将应用程序安装在虚拟目录而不是域根目录中
  • 将页面移动到应用程序的不同目录层级中
  • 从主页面或用户控件中使用服务,这些可实例化于不同的页面和目录层级中

您也可以在页面/用户控件/主页面中公开一个公共属性,并使用相同方法中的代码调用它,例如:

  • 页面/uc/master中的代码:public string ServiceUrl { get { return ResolveClientUrl("~/Account/UserNameExists/");}
  • .aspx中的代码:url: '<%= ServiceUrl',

0
你是在调用 Web 服务还是这个 URL 的目的地是什么? 当我在我的 Web 应用程序中使用 AJAX 调用时,我通常会在 Web 服务内设置方法并像这样调用它们:
 $.ajax({
        type: "POST",
        url: "../Services/BookingService.asmx/GetVerifiedReservations",
        data: paramsJson,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (response) {
            invalidDays = $.parseJSON(response.d);
        },
        error: function (xhr, textStatus, thrownError) {
            alert(textStatus);
            alert(thrownError);
        }
    });

正如您所看到的,该路径是相对于您域中其余文件的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接