jquery post和html form post之间的区别

ken*_*nny 1 html jquery node.js express

我正在寻找一段时间,但我没有得到它:

Jquery $ .post和我提交带有帖子的普通html表单时有什么不同?

我的jquery代码:

$.post( "/test", query , function( data ) {
  console.log(data)  
});
Run Code Online (Sandbox Code Playgroud)

我的HTML代码:

<form method="post" action="/test"   >
<input id="query" type="text"  name="q"  >
<input type="submit" value="Search">
</form>
Run Code Online (Sandbox Code Playgroud)

我使用快递,当我做jquery帖子时,下面的代码不会工作.服务器只会将重定向作为数据发送,不会重定向页面.但是当我使用表单时,它将重定向页面tp/newpage.为什么会这样?是否有一种方式,jquery将像html表单一样工作?

router.post('/test', function(req, res) {
res.redirect('/newpage');
}
Run Code Online (Sandbox Code Playgroud)

我看到在chrome中可以看到jquery使用类型"xhr"而表单使用"document"...我能改变吗?

Dav*_*vid 9

Jquery $ .post和我提交带有帖子的普通html表单时有什么不同?

在大多数情况下,没有.两者都使用表单中的值发出HTTP POST请求.一个只是在页面的上下文中这样做,另一个在AJAX上下文中这样做而没有刷新页面.

服务器只会将重定向作为数据发送,不会重定向页面.

在你身上存在一点误解.服务器永远不会重定向浏览器.所有服务器都会将标头发送回浏览器,建议浏览器执行重定向.

当浏览器在页面加载请求的上下文中接收到该标头时,它将执行重定向.当JavaScript代码在AJAX请求的上下文中接收到该标头时,它会忽略它.根据设计,AJAX响应不会重新加载页面.

如果您希望表单发布导致服务器启动的重定向,请使用普通表单POST.您仍然可以从JavaScript启动此表单POST,只是不使用,$.post()因为这是一个AJAX请求.相反,你可能会做$('form').submit()或像$('form input[type="submit"]').click().这可能需要一些修修补补.

另一方面,如果您想使用AJAX,那么响应AJAX请求完成的任何条件重定向逻辑都需要在客户端逻辑中.