2011-12-31 709 views
25

AJAX請求和直接瀏覽器請求(就網頁的調用方式和加載方式而言)有區別嗎?AJAX請求和常規瀏覽器請求之間的區別

換句話說,我的意思是說:是一種直接的服務器端請求,其處理方式與客戶端請求(由瀏覽器啓動)有所不同?

回答

18

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 

這導致我得出結論,默認是絕對沒有區別。

-1

您的用戶代理,也稱爲瀏覽器,發送XHR頭,其可以從PHP趕上這樣的:

$_SERVER['HTTP_X_REQUESTED_WITH'] 
-1

不是。除了大多數Ajax客戶端發送X-Requested-With=XMLHttpRequest HTTP標頭

21

可能有一些標頭差異,但主要行爲差異在客戶端上。

當瀏覽器按照window.location.href = "index.html"的要求發出常規請求時,它會清除當前窗口並將服務器響應加載到窗口中。

通過ajax請求,當前的窗口/文檔不受影響,JavaScript代碼可以檢查請求的結果並根據結果做它想要的結果(將HTML動態插入到頁面中,解析JSON並將其用於頁面邏輯,解析XML等)。

服務器沒有做任何不同的事情 - 只是客戶端如何處理來自兩個請求的響應。

1

雖然我相信你們,在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(); 

它的工作原理!奇怪的。