jquery post和html form post之间的区别

时间:2015-06-07 17:43:57

标签: jquery html node.js express

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

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; ......我可以改变吗?

1 个答案:

答案 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请求完成的任何条件重定向逻辑都需要在客户端逻辑中。