通过url路由访问页面时,JQuery对象出现预期错误

时间:2010-05-29 16:25:52

标签: asp.net javascript jquery jquery-plugins url-routing

在我的global.asax中,我有如下所示的URL路由设置:

routes.MapPageRoute("User Logon", "{Vendor}/Logon", "~/Logon.aspx");

在logon.aspx页面中,我有一个“设计”登录按钮的脚本:

<link href="jquery/css/flick/jquery-ui-1.8.1.custom.css" rel="stylesheet" type="text/css" />
<link href="images/style.css" rel="stylesheet" type="text/css" />
<script src="jquery/js/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="jquery/js/jquery-ui-1.8.1.custom.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $('#<%= ButtonLogon.ClientID %>').button();
    });
</script>

当我访问页面时,我们使用url(在调试模式下)http://localhost/logon.aspx?v=1页面正确加载并正确加载jquery按钮命令。但后来我使用新的url路由访问页面,我收到此错误。

Microsoft JScript运行时错误:预期的对象

任何人都知道为什么会这样?

感谢。

1 个答案:

答案 0 :(得分:3)

这是因为HTML中的相对路径。

当您以http://your.domain/Logon.aspx访问您的网页时,相对网址jquery/js/jquery-1.4.2.min.js会解析为http://your.domain/jquery/js/jquery-1.4.2.min.js并正确加载。

但是当您以http://your.domain/xxx/Logon.aspx访问它时,该URL会解析为http://your.domain/xxx/jquery/js/jquery-1.4.2.min.js,并且由于您的服务器上确实没有名为xxx的文件夹,服务器将返回404并且脚本无法加载。因此,当您随后尝试访问该脚本中定义的函数和变量时,会出现错误。

要解决此问题,您应该使用绝对路径 - 即/jquery/js/jquery-1.4.2.min.js(注意前导斜杠),或使用ResolveUrl(或Url.Content)方法正确映射URL - 即<%= Url.Content( "~/jquery/js/jquery-1.4.2.min.js" ) %>

后一个选项更可取,因为它不依赖于您的应用程序托管在域的根目录。