AJAX請求和直接瀏覽器請求(就網頁的調用方式和加載方式而言)有區別嗎?AJAX請求和常規瀏覽器請求之間的區別
換句話說,我的意思是說:是一種直接的服務器端請求,其處理方式與客戶端請求(由瀏覽器啓動)有所不同?
AJAX請求和直接瀏覽器請求(就網頁的調用方式和加載方式而言)有區別嗎?AJAX請求和常規瀏覽器請求之間的區別
換句話說,我的意思是說:是一種直接的服務器端請求,其處理方式與客戶端請求(由瀏覽器啓動)有所不同?
AJAX請求是相同到「正常的」瀏覽器請求只要服務器除了可能略有不同的HTTP標題之外,例如鉻發送:
X-Requested-With:XMLHttpRequest
我不知道這頭標準化與否,或者如果它在每一個瀏覽器,甚至不同的包括在每個瀏覽器都。
編輯:我收回那,該頭是由jQuery的(和可能的其他JS庫)發送的,而不是瀏覽器如由證明:
var xhr = new XMLHttpRequest();
xhr.open('GET', '/');
xhr.send();
,它發送:
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Cookie: ....
Host:stackoverflow.com
If-Modified-Since:Sat, 31 Dec 2011 01:57:24 GMT
Referer:http://stackoverflow.com/questions/8685750/how-does-an-ajax-request-differ-from-a-normal-browser-request/8685758
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11
這導致我得出結論,默認是絕對沒有區別。
您的用戶代理,也稱爲瀏覽器,發送XHR頭,其可以從PHP趕上這樣的:
$_SERVER['HTTP_X_REQUESTED_WITH']
不是。除了大多數Ajax客戶端發送X-Requested-With=XMLHttpRequest
HTTP標頭
可能有一些標頭差異,但主要行爲差異在客戶端上。
當瀏覽器按照window.location.href = "index.html"
的要求發出常規請求時,它會清除當前窗口並將服務器響應加載到窗口中。
通過ajax請求,當前的窗口/文檔不受影響,JavaScript代碼可以檢查請求的結果並根據結果做它想要的結果(將HTML動態插入到頁面中,解析JSON並將其用於頁面邏輯,解析XML等)。
服務器沒有做任何不同的事情 - 只是客戶端如何處理來自兩個請求的響應。
雖然我相信你們,在weblogic裏面有個怪異的東西: 我正在用使用AJAX調用的ExtJS框架編寫一個應用程序。
一邊做j_security_check,我這樣做時,AJAX的方式總是得到錯誤:Weblogic的說:
unauthorized: var submitButton = new Ext.Button({
text: 'Logon',
formBind: true, //only enabled once the form is valid
disabled: true,
handler: function() {
Ext.Ajax.request({
url: "j_security_check",
params: {
j_username: dlg.getForm().findField('j_username').getValue(),
j_password: dlg.getForm().findField('j_password').getValue()
},
method: "GET"
});
}
});
這種失敗。
當我發出這樣的:
window.location.href = "j_security_check?j_username=" + dlg.getForm().findField('j_username').getValue() + "&j_password=" + dlg.getForm().findField('j_password').getValue();
它的工作原理!奇怪的。