script标签在新写入的文件上返回'not found'

时间:2013-07-18 12:25:28

标签: php ajax tags file-not-found

我正在编写一个网页(在PHP / javascript中),该网页应该检查jQuery.js是否存在于某个位置,如果它已经存在,则将其写入该位置(通过从互联网上抓取),以及然后将新编写的jQuery发送给客户端以供使用。现在我无法在页面的一个负载上发生这种情况。我总是要刷新。

首先,在客户端,我有:

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

此脚本对服务器进行AJAX调用,该服务器检查jQuery并将其写入磁盘(如果不存在)。我将此作为一个不寻常的同步 AJAX调用,因此操作应该在其他任何事情发生之前完成。这是“script1.js”的相关部分。由于调用是同步的,因此我不必检查readyState是4和所有爵士乐的时间。在服务器报告之后,该函数应仅返回(对吗?或者是错误的?)。

var xmlhttp = getXmlhttp();  // gets an xmlhttp object appropriate to the browser.
xmlhttp.open("POST", "check_jQuery.php", false);  // 'false' for synchronous operation.
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send();
return;

同时在服务器端(“check_jQuery.php”)我得到了:

if (!is_file("jQuery.js")) {
  file_put_contents("jQuery.js", file_get_contents($jQueryUrl));
}
while (!file_exists("jQuery.js")) sleep(1);

while循环是一个kludge,用于确保在文件写得很好之前函数不会返回。它确实这样做了,但似乎并不重要......回到客户端,在页面的下方,我有:

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

但是即使我在从服务器返回之前进行了超长的等待,客户端脚本仍然无法找到jQuery。但是,如果我重新加载页面,则会成功找到它。

所以似乎客户端可能事先询问服务器文件是否存在,即使我试图延迟客户端执行,直到 存在。有趣的是,直到服务器返回之后,以及在成功写入文件之后,404错误才会显示在javascript调试器中。有人可以解释为什么会这样吗?有没有办法强迫客户在我有机会写文件之前不要求文件?

0 个答案:

没有答案