我正在使用jQuery.load('/Business/Tags')加载一些内容,当使用本地Web服务器时,它可以正常工作。但是在使用IIS时,这个URL无法正确解析。我看到了一些不同的方法来解决这个问题,比如使用ResolveUrl。那么,在JavaScript中处理解析URL的最佳方式是什么?
我正在使用jQuery.load('/Business/Tags')加载一些内容,当使用本地Web服务器时,它可以正常工作。但是在使用IIS时,这个URL无法正确解析。我看到了一些不同的方法来解决这个问题,比如使用ResolveUrl。那么,在JavaScript中处理解析URL的最佳方式是什么?
我也曾遇到过类似的问题,我的情况与JavaScript有关。由于我的JavaScript也在一个单独的文件中,并且包含在我的主页面中,因此我无法在我的情况下使用ResolveUrl。
以下是我在这种情况下解决问题的方法。我在我的主页面的头部标签中添加了以下JavaScript:
<script type="text/javascript">
var baseUrl = "<%= Request.Url.GetLeftPart(UriPartial.Authority) %>";
</script>
我正在设置一个全局变量,可以在所有JavaScript文件中访问,名称为baseUrl。jQuery.load(baseUrl + '/Business/Tags');
就我而言,我在可能的情况下使用Url.Action / Url.RouteUrl助手与JavaScript / jQuery:
$.load('<%= Url.Action("Tags", "Business") %>')
或者
$.load('<%= Url.RouteUrl("BusinessTagsRoute") %>')
$.load('<%= Url.ResolveUrl("~/Business/Tags") %>')
更新:
您还可以为JavaScript / jQuery创建特殊控制器,其中包含操作,返回带有JavaScript的PartialView:
public ActionResult YourJavaScript()
{
Response.ContentType = "application/x-javascript";
return PartialView("YourJavaScript");
}
然后在YourJavaScript.ascx文件中,您可以使用带有WebForms服务器标记的JavaScript/jQuery代码。我仍然建议不要在jQuery/AJAX中使用硬编码的URL。
一些我们在应用程序中采取的方式:
var applicationPath = '<%= Url.Content("~/") %>';
或者
var applicationPath = '<%= Request.Url.Scheme %>://<%= Request.Url.Host %><%= Request.ApplicationPath %>/';
我仍然建议在您的主页中使用基本 href 标签。因此,任何图像或 JavaScript 调用都将从此 URL 解析。这将允许您将 JavaScript 函数/调用放置在外部 js 文件中。
<html> <head> <base href="http://www.mysite.com/virtual_dir1/"> <script src="location_of_js_file">
请记住基本 href 中的结尾 '/ '。
另外,请删除前导 '/',每当您执行 jQuery.load('Business/Tags') 时,它实际上将来自http://www.mysite.com/virtual_dir1/Business/Tags。
base
是不正确的。Base HREF只应用于将相对URI解析为当前所在页面。通过这种方式设置base
,所有此页面上的相对URI都将指向http://www.mysite.com/virtual_dir1/
。 - ahsteele