在不同的目录级别访问时,jQuery Ajax Url路径中断

时间:2010-10-15 14:00:24

标签: javascript asp.net jquery ajax

这是另一个非常简单的问题,我无法找到一个优雅的解决方案。基本上,我有一个使用jQuery Ajax调用的应用程序。在此调用中,您必须为要调用的服务指定URL路径。在这种情况下,我需要从我的应用程序中的多个文件中调用此JavaScript函数,并且这些文件位于文件夹结构的不同级别。

这是一个问题,您将如何优雅地处理此场景,以便您可以从应用程序中的任何位置调用JS函数。以下是我的约束:

1)我在Asp.Net 4.0上运行。 2)我当前的环境有本地,开发,测试和产品环境(硬编码URL路径不起作用)。

代码段:

    function MakeTheCall() {

  $.ajax({
   type: "POST",
   url: "Services/FileName.asmx/Handler", //Path in Question
   data: "",
   contentType: "application/json; charset=utf-8",
   dataType: "json",
   success: function(result) {
   },
   error: function(xmlHttpRequest, status, err) {
   }

  });
}

我希望能够从不同目录级别的文件中调用此函数(在外部JavaScript文件中),例如:

1)http://SomeDomain.com/SomeDir/CallingFile.aspx 2)http://SomeDomain.com/CallingFile.aspx

有什么建议吗?我可以想到几种不同的场景来解决这个问题,但大多数情况都围绕创建一个JavaScript变量并在C#中设置它的值。希望有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您是否尝试过url: "/Services/FileName.asmx/Handler"

编辑:上述内容的适用性取决于您是否始终将“服务”目录放在与域名相同的级别上。如果您在不同的路径级别部署整个应用程序,则需要使用

// in code-behind file
string rootURL = HttpContext.Current.Request.Url.GetLeftPart(System.UriPartial.Authority) + 
    "/" + HttpContext.Current.Request.ApplicationPath + "/";

// in .aspx
url: <%Response.Write(rootURL)%> + "Services/FileName.asmx/Handler"