【问题标题】:JQuery ajax .load() to reference to the correct urlJQuery ajax .load() 引用正确的url
【发布时间】:2012-06-28 11:56:51
【问题描述】:

我有一个 localhost 有几个项目,所以这个项目在 VS2010 属性->web->使用本地 IIS web server = 'localhost/project4/'。 (我不能使用正常的调试 VS 开发服务器,因为某些组件在我的项目中不起作用)无论如何,localhost 没什么大不了的,所以我继续编码。

现在,当我调用 .load('/Account/LogOn'); 时,在 ajax 中它给了我“localhost/Account/LogOn”,但我真正想要的是“localhost/project4/Account/LogOn”,因为它位于 project4 目录中,而不是根目录中。

知道如何告诉 ajax 我需要域名和 URL 其余部分之间的虚拟目录前缀吗?

编辑-------------------------------------------

谢谢大家,结合你的所有知识,我想最好的方法是:

  1. 将 js 脚本包含到 .cshtml 服务器端并使用“~/Account/LogOn/”让 .net 找出路径。

  2. 创建一个全局变量 remove_me_debug_only_virtual_directory = "/project4/";在 js 代码中。将其附加到域名。这样我们就不用把.net拉进水里,用.cshtml写js代码了。

  3. 如果可以的话,把项目移到localhost/root,在这种情况下我不能,因为工作中的其他人想访问这个联网的服务器并做演示。

【问题讨论】:

  • 你试过.load('Account/LogOn');(没有前面的/)吗?
  • @J Steen,我认为 tilda 仅适用于 .cshtml 或 .aspx 中的 @Url.Content("~/Account/LogOn") 之类的服务器端?似乎在 js 文件中不起作用?我最终将拥有 'localhost/~/Account/LogOn' 并且 .load() 不会为我解析它?
  • @Anthony G,没有前面的“/”会带来更多问题,比如说,你有一个 ajax LogOnPartial 第一次从 Home/Index/ 调用你会得到 'localhost/project4/Account/logOn',好的。但是当你去 Account/Index/ 再次调用 LogOnPartial 时,你会得到'localhost/project4/Account/Account/LogOn',重复两次,这是不好的。

标签: javascript jquery .net ajax


【解决方案1】:

如果您的 JS 代码在 MVC cshtml 文件中,请像这样使用它:

.load('@Url.Action("LogOn", "Account")');

正确的 URL 将放置在具体的 JS 代码中。

【讨论】:

    【解决方案2】:

    根据.net文档,

    服务器控件中的绝对和相对路径引用具有以下缺点:

    绝对路径在应用程序之间不可移植。如果移动绝对路径指向的应用程序,链接将断开。

    如果您将资源或页面移动到不同的文件夹,客户端元素样式中的相对路径可能难以维护。

    为了克服这些缺点,ASP.NET 包含了 Web 应用程序根运算符 (~),您可以在指定服务器控件中的路径时使用它。 ASP.NET 将 ~ 运算符解析为当前应用程序的根。您可以将 ~ 运算符与文件夹结合使用,以指定基于当前根目录的路径。

    如上所述,使用~ 将引导您使用asp 进入Web 项目的根目录:

     <asp:image runat="server" id="Image1" ImageUrl="~/Images/SampleImage.jpg" />
    

    欲了解更多信息,请访问:Web Project Paths

    根据您的更新:可能重复:base url using jQuery

    @gregguida 所述:

      var l = window.location;
      var base_url = l.protocol + "//" + l.host + "/" + l.pathname.split('/')[1];
    
      //all you need to do is work with l.pathname.split('/') to find what you need.
    

    【讨论】:

    • hmmm,如上所述,Razor @Url.Content("~/Account/LogOn") 或 WebForm ,这些是服务器端代码。我说的是js代码ajax .load()...
    • 你是说 .load() 在加载之前不执行你的 asp 代码吗?因为 load() 从服务器读取内容然后返回相应的 html。
    • 对不起,我的错,我现在稍微修改了标题。我的意思是 js JQuery 一中的 .load() 函数。不是服务器端的。
    【解决方案3】:

    我是一名 java 开发人员,但在这两种情况下的上下文是相同的, 在你可以按照步骤

    1. 如果 root 是 "/",请检查您的服务器的上下文,然后您必须调用类似,

      .load('/project4/Account/LogOn');

    2. 如果您的应用程序是 root 并且您可以从自身调用此请求,那么

      .load('帐号/登录');

    【讨论】:

    • 我曾考虑将“/project4/”硬编码到脚本中,但当我尝试将项目部署到真实域或重新使用未来?
    • 我们使用 java 来使用 request.getConextPath 来解决此类冲突。你应该在 .net 中也有类似的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多