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:*.com
If-Modified-Since:Sat, 31 Dec 2011 01:57:24 GMT
Referer:http://*.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();
它的工作原理!奇怪的。