我很難理解這一點。 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