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