Jquery $ .post和我提交带有帖子的普通html表单时有什么不同?
我的jquery代码:
$.post( "/test", query , function( data ) {
console.log(data)
});
我的HTML代码:
<form method="post" action="/test" >
<input id="query" type="text" name="q" >
<input type="submit" value="Search">
</form>
我使用快递,当我做jquery帖子时,下面的代码不会工作。服务器只会将重定向作为数据发送,不会重定向页面。但是当我使用表单时,它将重定向页面tp / newpage。为什么会这样?有没有一种方法可以像html表单那样以相同的方式运行jquery?
router.post('/test', function(req, res) {
res.redirect('/newpage');
}
我看到可以在chrome中看到jquery使用类型&#34; xhr&#34;和表格使用&#34;文件&#34; ......我可以改变吗?
答案 0 :(得分:9)
Jquery $ .post和我提交带有帖子的普通html表单时有什么不同?
在大多数情况下,没有。两者都使用表单中的值发出HTTP POST请求。一个只是在页面的上下文中这样做,另一个在AJAX上下文中这样做而没有刷新页面。
服务器只会将重定向作为数据发送,不会重定向页面。
在你身上存在一点误解。服务器从不重定向浏览器。所有服务器都会向浏览器发回一个标题,建议浏览器执行重定向。
当浏览器在页面加载请求的上下文中收到该标头时,它会执行重定向。当JavaScript代码在AJAX请求的上下文中接收到该标头时,它会忽略它。根据设计,AJAX响应不会重新加载页面。
如果您希望表单发布导致服务器启动的重定向,请使用普通表单POST。您仍然可以从JavaScript启动此表单POST,而不是使用$.post()
,因为这是一个AJAX请求。相反,您可以执行$('form').submit()
或$('form input[type="submit"]').click()
之类的操作。可能需要一些修改。
另一方面,如果您想使用AJAX,那么响应AJAX请求完成的任何条件重定向逻辑都需要在客户端逻辑中。