【发布时间】: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