jQuery.load()正在加载页面,但加载页面内的嵌入javascript正在给出Method Not Allowed

时间:2010-11-09 19:28:04

标签: javascript asp.net jquery asp.net-mvc-2

所以这是场景:

我正在4.0框架下使用ASP.NET MVC 2,并且在Action链接上有一个调用$ .load的页面。这一切都很好,它按预期工作。正在加载的页面调用了javascript文件:

<script type="text/javascript" src="somejs.js"/>

这是失败并说“方法不允许”,因为它试图POST此调用而不是GET。我可以用萤火虫看到这种情况。

我在项目中有另一个js文件,该文件包含在所有页面中,并调用:

$.ajaxSetup({
    type: "POST",
    cache: false,
    timeout: 60 * 1000
});

这样我就不必将所有$ .ajax调用显式地POST了。如果我将其更改为GET,$ .load调用效果很好。但是,该网站的其余部分并不是因为Microsoft从MCV 2或4.0框架中退出了GET方法(我真的不记得哪个)。

我宁愿不明确地将所有$ .ajax调用更改为POST,但我不知道此时还有什么要做,所以我希望在这里找到答案。

感谢。

2 个答案:

答案 0 :(得分:2)

  

正在加载的页面调用了javascript文件:

请勿使用<script>load()将带有html()标记的HTML注入文档。它是非常不可靠的跨浏览器(在jQuery中,它可能会根据情况完全删除脚本标记),甚至当它工作时,它会通过加载相同的脚本两次导致真正的混淆,可能会给你重复的定义和处理程序。 (当然,任何依赖于在页面加载时执行的脚本都是注定要失败的。)

如果在页面加载后需要执行某些脚本,请将该代码保留在静态脚本中并在ajax / load回调函数中执行,或让服务器返回包含JSON对象的JSON对象字符串中的代码与HTML分开。

  

我不想明确地将所有$ .ajax调用更改为POST

如果您真的必须尝试动态加载<script>标记,则必须...或者更改jQuery-1.4.3.js第4978行中对ajax()的调用以包含显式内容type: 'GET'设置。可以说这是一个jQuery bug,不包括在内。但另一方面,AJAX加载<script>的整个前提是有缺陷的。

答案 1 :(得分:0)

有几点想法。根据{{​​3}}:

  

如果数据作为对象提供,则使用POST方法;否则,假设GET。

你是怎么称呼.load()的?如果您使用对象作为第二个参数,它将使用POST。

如果你正确使用.load并且导致问题的是ajaxSetup,也许你可以在加载时暂时将ajaxSetup类型更改为GET,然后将其设置回POST。只是一个想法。