0

当我对服务器进行 ajax 调用时,整个页面不是回发,只有少量数据进入服务器并返回响应页面。

但我想知道处理。服务器或服务器代码如何知道请求是正常调用还是 Ajax 调用。

我请求专家,请消除我的疑问。

提前致谢。

4

3 回答 3

3

服务器或服务器代码如何知道请求是普通调用还是 Ajax 调用。

如果您的 javascript 代码将 HTTP 数据包标记为这样,服务器就会知道这一点。例如,在 jQuery 中,发送到服务器的 HTTP 标头有一个X-Requested-With集合,ASP.NET 使用它来区分 HTTP 数据包是否是 ajax 调用

要了解有关 HTTP 数据包的更多信息,您可以检查在Fiddler等数据包嗅探器或带有 dev 的浏览器中发送的数据包。监控流量的工具。在后一种情况下,您可以通过执行以下操作在例如​​ Chrome 开发工具中看到这一点:

  1. 打开 Chrome 开发者工具Ctrl+Alt+I(或Cmd+Alt+I在 Mac 中)。
  2. 选择网络选项卡(您可能需要刷新页面才能启用网络监控)
  3. 执行 Ajax 调用,发出的 HTTP 请求应显示在底部的列表中。
  4. 选择相关数据包,您现在应该会看到所选数据包的“标头”、“预览”、“响应”、“Cookies”和“时间”选项卡。
  5. 选择“标题”选项卡
  6. 您可能需要扩展该Request Headers部分。标题之间应该是X-Requested-With: XMLHttpRequest

这是我在编辑此答案时查看包的工具的屏幕截图:

Chrome 开发工具在编辑此答案时检查请求

请注意,ajax 调用不一定必须是异步的,因为它们也可以是同步的(在加载响应之前阻塞 javascript)。有时需要同步调用,例如弹出窗口阻止程序不允许您在异步 ajax 回调中打开浏览器窗口。

于 2013-06-13T07:01:21.203 回答
1

服务器或服务器代码如何知道请求是普通调用还是 Ajax 调用

它没有。Ajax 发送的 HTTP 请求与任何其他 HTTP 请求没有任何不同。

发出请求的代码可以做一些事情以使其可识别(例如,通过添加查询字符串、将Accept标头更改为更适合上下文的内容(例如Accept: application/json)或添加额外的 HTTP 标头(某些库添加X-Requested-With: XMLHttpRequest)。

这些都不是保证,因为有人总是可以手动发出 HTTP 请求。它们可以很好地确定在您自己的应用程序中返回哪个视图,但如果您尝试实现任何类型的安全性则不行。

于 2013-06-13T07:05:28.420 回答
0

AJAX 调用与XmlHttpRequest原型实例一起执行。其方法的第三个参数.open()是 async:bool。xhr.open("GET", "http://example.com", true) 异步和 同步也是如此 xhr.open("GET", "http://example.com")。jQuery get(),默认情况post()ajax()是异步的,您需要传递异步参数以使其同步。所以回答你的问题:你告诉浏览器你想要什么请求。

于 2013-06-13T06:57:15.910 回答