0

我正在编写一个网页(在 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 循环是一个确保函数在文件被正确写入之前不会返回的组件。它确实做到了,但这似乎并不重要......回到客户端,在页面的下方,我得到了:

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

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

所以看起来可能客户端提前询问服务器文件是否存在,即使我试图延迟客户端执行直到它确实存在。有趣的是,404 错误不会出现在 javascript 调试器中,直到服务器返回并且文件被成功写入之后。有人可以解释为什么会这样吗?有没有办法强制客户在我有机会写文件之前不要索要文件?

4

0 回答 0