当我对服务器进行 ajax 调用时,整个页面不是回发,只有少量数据进入服务器并返回响应页面。
但我想知道处理。服务器或服务器代码如何知道请求是正常调用还是 Ajax 调用。
我请求专家,请消除我的疑问。
提前致谢。
服务器或服务器代码如何知道请求是普通调用还是 Ajax 调用。
如果您的 javascript 代码将 HTTP 数据包标记为这样,服务器就会知道这一点。例如,在 jQuery 中,发送到服务器的 HTTP 标头有一个X-Requested-With
集合,ASP.NET 使用它来区分 HTTP 数据包是否是 ajax 调用。
要了解有关 HTTP 数据包的更多信息,您可以检查在Fiddler等数据包嗅探器或带有 dev 的浏览器中发送的数据包。监控流量的工具。在后一种情况下,您可以通过执行以下操作在例如 Chrome 开发工具中看到这一点:
Ctrl+Alt+I
(或Cmd+Alt+I
在 Mac 中)。Request Headers
部分。标题之间应该是X-Requested-With: XMLHttpRequest
这是我在编辑此答案时查看包的工具的屏幕截图:
请注意,ajax 调用不一定必须是异步的,因为它们也可以是同步的(在加载响应之前阻塞 javascript)。有时需要同步调用,例如弹出窗口阻止程序不允许您在异步 ajax 回调中打开浏览器窗口。
服务器或服务器代码如何知道请求是普通调用还是 Ajax 调用
它没有。Ajax 发送的 HTTP 请求与任何其他 HTTP 请求没有任何不同。
发出请求的代码可以做一些事情以使其可识别(例如,通过添加查询字符串、将Accept
标头更改为更适合上下文的内容(例如Accept: application/json
)或添加额外的 HTTP 标头(某些库添加X-Requested-With: XMLHttpRequest
)。
这些都不是保证,因为有人总是可以手动发出 HTTP 请求。它们可以很好地确定在您自己的应用程序中返回哪个视图,但如果您尝试实现任何类型的安全性则不行。
AJAX 调用与XmlHttpRequest
原型实例一起执行。其方法的第三个参数.open()
是 async:bool。xhr.open("GET", "http://example.com", true)
异步和
同步也是如此
xhr.open("GET", "http://example.com")
。jQuery get()
,默认情况post()
下ajax()
是异步的,您需要传递异步参数以使其同步。所以回答你的问题:你告诉浏览器你想要什么请求。