【问题标题】:jQuery $.load() functioning on personal webserver, but not production webserverjQuery $.load() 在个人网络服务器上运行,但不是生产网络服务器
【发布时间】:2010-12-08 14:14:21
【问题描述】:

编辑:我发现这是一个 405 错误。因此,网络服务器和处理 POST 方法发生了一些事情。

我遇到了一件奇怪的事情。我的测试环境和生产环境都有相同的 javascript 代码。

测试环境起作用,而生产环境不起作用。这是我的相同代码。

<html>
    <head>
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
      <script type="text/javascript" src="http://cdn.jquerytools.org/1.1.2/jquery.tools.min.js"></script>
      <script type="text/javascript" src="./js/jquery.scrollTo-min.js"></script>
    </head>
    <body>
      <div class="content" id="content"> 
        <a id="changeText" href="test.html">Change</a>
      </div>

      <script>
         $(document).ready(function() {

            $("#changeText").live('click', function(){

                var url = $(this).attr("href");

                $("#content").load(url, {var1:Math.random()*99999},function(){

                     alert(url + " loaded");
                });

                $.scrollTo("0%", 400);

              return false;
            });
        });
     </script>
    </body>
</html>

两种环境都报告了这一点

alert(url + " loaded");

正在发生。但只有我的测试环境真正显示了变化。

生产网络服务器在正确的位置有“test.html”。

【问题讨论】:

  • 您是否尝试过使用 Firebug 监控请求管道,或者检查服务器上的请求日志以查看请求是否实际发送,如果是,服务器的响应是什么?
  • 我对 jQuery 还很陌生,试图找出如何在 Firebug 中破译信息对我来说并不容易。在这无数的变量中,我到底在寻找什么?
  • 因为您提到了“显示更改”,所以除了 405 错误之外,还可能存在缓存问题。这可能是您在调试时需要注意的事情。

标签: javascript jquery post http-status-code-405


【解决方案1】:

405 错误意味着您发送到的 URL 不希望您以这种方式发送数据。例如,如果您向仅用于处理 GET 请求的 URL 发送 POST 请求,则会收到此错误。

我的猜测是您运行的任何服务器都设置为不允许将 POST 数据发送到扩展名为 .html 的页面,从而导致您看到的错误。尝试将扩展名更改为 .php、.aspx 等,看看是否有帮助。

【讨论】:

    【解决方案2】:

    确定scrollTo 脚本包含在生产服务器上(还是我误解了change 的意思)?也许尝试根相对路径而不是'./js'?我会检查 Firebug 的脚本选项卡以确保它被包含在内。

    【讨论】:

    • 我很肯定,因为 scrollTo 正在运行。唯一不起作用的是 div 内容由于 AJAX 调用而发生变化。
    • ajax 调用返回什么?
    • 我不确定如何捕捉它返回的内容。我是否只是将其设置为一个变量,然后将其打印到我的控制台?
    • 啊,我知道现在发生了什么。我收到 405 方法不允许错误。但是,我不确定如何处理。
    • 什么是url,实际页面位于何处?
    最近更新 更多