【问题标题】:Difference between jquery post and html form postjquery post和html form post的区别
【发布时间】:2015-08-22 04:15:35
【问题描述】:

我搜索了一段时间,但我不明白:

Jquery $.post 和我提交带有 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>

我正在使用 express,当我发布 jquery 时,下面的代码将不起作用。服务器只会将重定向作为数据发送,不会重定向页面。但是当我使用表单时,它将重定向页面 tp /newpage。为什么会这样?有没有办法让 jquery 像 html 表单一样工作?

router.post('/test', function(req, res) {
res.redirect('/newpage');
}

我看到可以在 chrome 中看到 jquery 使用类型“xhr”而表单使用“document”...我可以更改吗?

【问题讨论】:

    标签: jquery html node.js express


    【解决方案1】:

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

    在大多数情况下,什么都没有。两者都使用表单中的值发出 HTTP POST 请求。一个只是在页面上下文中执行此操作,另一个在 AJAX 上下文中执行此操作而不刷新页面。

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

    这对你来说有点误解。服务器从不重定向浏览器。服务器所做的只是将标头发送回浏览器,建议浏览器执行重定向。

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-18
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2016-04-22
      • 2013-10-06
      • 2012-09-30
      相关资源
      最近更新 更多