當我做一個Ajax調用服務器的整個頁面不回發時,只有少量的數據傳遞到服務器並返回響應頁面。服務器如何知道請求是同步還是異步?
但我想知道處理。服務器或服務器代碼如何知道正常調用或Ajax調用中的請求。
我向專家請求,請澄清我的疑問。
在此先感謝。
當我做一個Ajax調用服務器的整個頁面不回發時,只有少量的數據傳遞到服務器並返回響應頁面。服務器如何知道請求是同步還是異步?
但我想知道處理。服務器或服務器代碼如何知道正常調用或Ajax調用中的請求。
我向專家請求,請澄清我的疑問。
在此先感謝。
服務器或服務器代碼如何知道正常調用或Ajax調用中的請求。
服務器知道這是否你的JavaScript代碼標記爲這樣的HTTP數據包。例如。 in jQuery the HTTP header sent to the server has an X-Requested-With
set and ASP.NET uses this to distinguish if HTTP packets are ajax calls or not。
要更多地瞭解你可以檢查無論是在一個數據包嗅探器,如Fiddler或與開發一個瀏覽器發送的那些HTTP報文。監視流量的工具。在後一種情況下,你可以在例如Chrome瀏覽器開發工具,通過執行以下操作:
Ctrl+Alt+I
(或Mac的Cmd+Alt+I
)。Request Headers
部分。其中標題應爲X-Requested-With: XMLHttpRequest
這裏是工具的截屏看包,因爲我在編這個答案:
需要注意的是AJAX調用不一定必須是異步因爲它們可以是同步的(阻塞javascript直到響應被加載)。有時需要同步呼叫,例如彈出窗口阻止程序不允許您在異步ajax回調中打開瀏覽器窗口。
AJAX調用與XmlHttpRequest
原型的實例執行。其.open()
方法的第三個參數是async:bool。所以 xhr.open("GET", "http://example.com", true)
是異步和 xhr.open("GET", "http://example.com")
是同步。 jQuery的get()
,post()
和ajax()
是默認異步,你需要通過異步PARAM使其同步。所以回答你的問題:你告訴瀏覽器你想要什麼請求。
服務器或服務器代碼如何知道在正常呼叫或Ajax的請求是否調用
事實並非如此。Ajax發送的HTTP請求與任何其他HTTP請求都不相同。
發出請求可以做一些事情,使其可識別(例如,通過添加一個查詢字符串,通過改變Accept
頭的東西更適合於上下文(如Accept: application/json
)或通過添加額外的HTTP標頭中的代碼(一些庫添加X-Requested-With: XMLHttpRequest
)
這些都不是保證,因爲有人總是可以手動發出HTTP請求。它們可以很好地確定在您的應用程序中返回哪個視圖,但是如果您嘗試實現任何類型的安全性
A *請求*不會是同步或異步的,這只是一個問題, sed要發送的請求將在發送請求後釋放線程。 – Quentin
瀏覽器知道什麼觸發了一個請求,因爲它們是軟件,並且被編程爲跟蹤這些事情(因爲如果他們沒有跟蹤哪個請求是出於什麼目的,那麼除了加載一個單獨的對象之外,它們將無法執行任何操作沒有外部圖像,腳本,樣式表等HTML文件) – Quentin
同意你的迴應,但仍然是我的問題是當我做ajax調用如何編碼或瀏覽器知道是的,它是Ajax調用? –