我很难理解这一点。 Ajax是异步的,很多是确定的......它在PHP上异步调用,并且PHP对数据库有一个sql查询。这意味着PHP sql查询也是异步完成的,对吧?否则,它会破坏目的。但是,如果不使用Ajax,则PHP sql查询将是同步的,是吗?我知道如何把它用于代码,但我只是困惑它如何在内部工作。使用Ajax进行异步PHP查询?
回答
对于原来的AJAX调用,SQL查询是“异步的”。不要挂在过去的术语上。客户端和服务器是完全独立的,特别是在处理HTTP请求时,在这种情况下。与AJAX“异步”的含义是,它从Javascript的其余部分异步处理 - 它不会阻止其他代码执行。但从那时起,所有东西都必须是同步的,否则它将不起作用(不包括AJAX的readystatechange)。
AJAX请求发送到服务器,服务器查询数据库,服务器响应,Javascript听到该响应,并且AJAX处理程序在其未被其他Javascript阻止时立即处理该响应。
因此不,PHP SQL查询本身总是同步的;这是异步的HTTP请求。
UPDATE:
作为一个例子,这里是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)上没有任何已知信息。服务器可能会每次循环检查数据库很长一段时间,直到发生某种变化(长轮询的一个例子)才会响应。
完美答案。谢谢 – Wap
好的,你几乎是正确的,但这里有一些规范。你对数据库的查询是异步的。请注意,您的PHP服务器将与客户机创建一个开放且唯一的数据会话。现在,当一个页面被请求时,客户端会发送一个响应,其中包含一个脚本(可能是javascript),它将在客户端机器上运行命令。在你的情况下,这些命令中的一些会对你的服务器进行异步调用,并且你的服务器会因为会话而记住。然后根据您的服务器知道的会话,它将按照您的请求提供服务。你可以调用你的数据库服务器或访问会话变量,或者做一些可能在PHP中更容易的处理。然后,当处理完成时,服务器将基于唯一会话向所讨论的客户端发回响应。作为一个重要的方面记录,请记住,任何异步操作都将花费在服务器上的时间,并做它必须做的事情。如果您在您的客户端脚本中引用变量,并在服务器完成其工作之前处理这些变量,那么它们将在客户端计算机上显示为错误(可能但很可能)。您的数据库调用将按预期异步发生。
- 1. 使用cljs-ajax进行异步调用
- 2. 使用NHibernate在Web应用程序中进行异步查询
- 3. PHP MySQLi异步查询
- 4. PHP异步mysql查询
- 5. php mysqli多查询异步?
- 6. 使异步查询同步
- 7. 使用Twisted API进行Python SDK的异步N1QL couchbase查询
- 8. 使用节点js进行2个异步查询
- 9. 使用c#4.0从数据库进行异步查询
- 10. 如何在Julia中使用回调进行异步Web查询?
- 11. 使用Node.js和ajax进行长查询
- 12. 使用Knockout JS进行Ajax查询
- 13. 使用jQuery/Ajax进行Elasticsearch查询
- 14. 执行sqlite查询异步
- 15. 使用AJAX和PHP进行查询后显示确认消息
- 16. 如何使用cherrypy进行异步ajax调用?
- 17. 使用AJAX或ASP.NET进行异步调用?
- 18. Ajax调用行为异步
- 19. 使用异步包同步运行猫鼬查询
- 20. 检查PHP脚本的进步与AJAX
- 21. 使用AJAX,MVC,JQuery进行异步数据库搜索
- 22. 使用AJAX和.net Web服务进行异步处理
- 23. 使用AJAX请求进行异步数组更新
- 24. 使用AJAX和Jquery进行异步搜索
- 25. AsProjection()用于异步查询
- 26. 使用异步调用进行缓存
- 27. 使用AjaxPro进行异步调用
- 28. 异步表查询
- 29. 异步Mongoose查询
- 30. 使用异步存储的Firebase查询
对于原始的AJAX调用,SQL查询是“异步的”。与AJAX“异步”的含义是,它从Javascript的其余部分异步处理 - 它不会阻止其他代码执行。但从那时起,所有东西都必须是同步的,否则它将无法工作(不包括AJAX的'readystatechange')。 AJAX请求发送到服务器,服务器查询数据库,服务器响应,Javascript听到该响应,并且AJAX在未被阻止时立即处理该响应。 – Ian
因此不,PHP SQL查询总是同步的,它是异步的HTTP请求。 – Ian
现在它变得更清晰了。谢谢。你介意把你的评论作为答案,以便我可以适当地给予它的优点吗? – Wap