【问题标题】:Ajax request for .php script being cancelled.php 脚本的 Ajax 请求被取消
【发布时间】:2013-10-01 01:55:31
【问题描述】:

我正在尝试通过 jquery 中的 ajax 调用运行脚本;但是,我没有得到任何结果,并且在 chrome 的网络视图中看到“(已取消)”状态。这仅在我请求 .php 脚本时发生,但如果我仅请求 .txt 文件,则工作正常;当我在下面的test.html 文件中将 url 更改为“test.txt”时,我收到了one\ntwo\nthree 的警报。我的网络服务器配置正确,文件权限都合适。如果我从浏览器请求我的.php 脚本,它会按预期返回“hello”。以下是我的三个文件,为什么test.php 的请求被取消,而test.txt 的请求却没有?

test.html

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8">
      <link rel="shortcut icon" href="/favicon.ico">
      <script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
      <title>test</title>
   </head>
   <body>
      <button id="b">click</button>
      <script>
         $("#b").bind("click", function() {
            $.ajax({
               url: "test.php", // test.txt works fine
               type: "GET",
               cache: false,
               success: function(data) {
                  alert(data);
               }
            });
         });
      </script>
   </body>
</html>

test.txt

one
two
three

test.php

<?php
echo "hello";
?>

如前所述,如果我使用浏览器请求 test.php,我会得到正确的“hello”输出,因此它可以正常执行。

-rwxr-xr-x 1 me me 22 Oct 1 02:49 test.php

【问题讨论】:

  • 将所有内容包装在 onReady() 事件中,例如 $(function(){ $("#b").bind("click", function()... })
  • 它在这里工作,立即复制和粘贴。你确定你没有一些.htaccess 东西在使用 PHP 路径/url 进行操作吗??
  • 在触发 AJAX 请求之前等待 DOM-ready 没有任何合乎逻辑的理由。并且必须将整个代码包装在 DOM 就绪块中是一种反模式,因为其中大部分(非 DOM 的东西)可以在页面年表中的那个点之前有效地运行。
  • ?_=1380562557516 是因为cache: false 附加了一个随机数,所以每次请求都不一样。
  • Chrome 有非常激进的缓存。有时需要大量刷新才能重新加载缓存。使用 CTRL + R 刷新或在开发期间保持开发工具打开 (f12)。要在 DevTools 打开时禁用缓存,请单击 f12(假设是 windows),单击右下角的 sprocket 并在 General 部分(默认情况下应该打开)下第一个复选框将显示“禁用缓存(当 DevTools 打开时)。 .... 不太确定 chrome 的缓存是问题所在。但这听起来很可能是嫌疑人。我在对平面文件执行 ajax 请求时看到这种情况非常糟糕。

标签: javascript php jquery html ajax


【解决方案1】:

(Canceled) 令人沮丧。如果您转到chrome://net-internals/#events,您可以更详细地了解您的请求为何收到(canceled)。 Chrome 阻止您的请求可能有多种原因,但您会在该网址获得有关您的请求的更多信息。如果您仍然遇到问题,请编辑您的问题以包含此信息。

【讨论】:

    【解决方案2】:

    假设您使用的是 WAMP 或 LAMP。

    如果您的 test.html 文件位于 Web 服务器的 www 目录之外,则 Web 服务器将阻止访问您的 test.php 文件,因为它违反了 same origin policy。这可以解释为什么在浏览器中访问 test.php 文件可以正常工作,以及为什么这个 test.html 对 test.php 文件的请求失败。

    这可能不是那么简单,但这也是偶尔让我感动的事情。尤其是当我在桌面上有一个 index.html 时。

    【讨论】:

      猜你喜欢
      • 2022-10-24
      • 2011-11-06
      • 2014-03-09
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2011-04-23
      • 2011-01-28
      相关资源
      最近更新 更多