2011-12-31 159 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(); 

它的工作原理!奇怪的。

相关问题