我无法理解这一点。 Ajax 是异步的,这一点是肯定的……它异步调用 PHP,并且 PHP 对数据库有一个 sql 查询。这意味着 PHP sql 查询也是异步完成的,对吧?否则,它会破坏目的。但是如果不使用 Ajax,PHP sql 查询将是同步的,是这样吗?我知道如何将它写入代码,但我只是对它的内部工作方式感到困惑。
最佳答案
SQL 查询是“异步的”,因为它是原始 AJAX 调用的一部分。不要纠结于过去的术语。客户端和服务器是完全分开的,尤其是在处理 HTTP 请求时,以及在这种情况下。 AJAX 的“异步”含义是它与 Javascript 的其余部分异步处理 - 它不会阻止其他代码的执行。但从那时起,一切都必须是同步的,否则将无法正常工作(AJAX 的 readystatechange 除外)。
AJAX 请求到达服务器,服务器查询数据库,服务器响应,Javascript 听到该响应,AJAX 处理程序在响应未被其他 Javascript 阻止时立即处理响应。
所以不,PHP SQL 查询本身总是同步的;这是异步的 HTTP 请求。
更新:
例如,这是大多数库以特定方式包装的非常精简的低级别 AJAX:
var xhr= new XMLHttpRequest();
var params = "x=2&y=3";
var url = "/your/url";
xhr.open("POST", url, true);
xhr.onreadystatechange = function () {
// The `xhr.readyState` changes based on the client's
// The `xhr.status` is set based on the server's response
// Normally, you check for `readyState` being 4 and `status` being 200
// meaning that the request is complete and the HTTP status code is 200 (good response)
if (xhr.readyState == 4) {
if (xhr.status == 200) {
// All good
}
} else {
}
};
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(encodeURIComponent(params));
当 xhr.send
被调用时,它会向服务器发出异步 HTTP 请求,对于 Javascript 来说就是这样。 onreadystatechange
监听器在 readyState
更改时运行。值为 4 表示它已完成,而 status
200 就是您正在寻找的...无论何时。
服务器上可能发生任何事情。您可以进行“异步”(不相关)数据库调用,以任何方式联系不同的服务器,出于任何原因(达到一定限制)或类似原因延迟。关键是在服务器返回响应之前,客户端(Javascript)什么都不知道。服务器可能会循环很长时间,每次都检查数据库,并且在发生特定变化之前永远不会响应(长轮询的示例)。
关于php - 使用 Ajax 的异步 PHP 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13925078/