JQuery的AJAX的POST到express.js服务器失败

主要的问题似乎是,jQuery是发送下列头中的AJAX请求:

POST http://localhost:3000/enter HTTP/1.1

,而它应该是

POST /enter HTTP/1.1

更详细地说,这是多么我的服务器和客户端都设置和确切的请求和响应:

我有一个非常简单的设置与express.js服务器和jQuery客户端。 所有我需要的是一个POST请求到服务器。

这是,或多或少,是服务器的样子:

app.post('/enter', function(req, res){ console.log(req.body) res.json({flag: true}) })

下面是jQuery的样子:

$.ajax( { url: '/enter' , type: 'POST' , cache: false , data: { field1: 1, field2: 2 } , success: function(data){ alert('Success!') } , error: function(jqXHR, textStatus, err){ alert('text status '+textStatus+', err '+err) } })

毫无疑问的是,服务器console.log确认正确的数据。 警报消息后AJAX我得到的是简单的text status error err

铬告诉我的请求头是:

POST http://localhost:3000/enter HTTP/1.1 Origin: http://localhost:3000 X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Ubuntu/11.10 Chromium/15.0.874.106 Chrome/15.0.874.106 Safari/535.2 Content-Type: application/x-www-form-urlencoded Accept: */* Referer: http://localhost:3000/?

这一要求的回应是:

HTTP/1.1 0 undefined

我还用telnet来获得一些清晰度到的情况。 在远程登录,我看到的回应是:

404 Not Found X-Powered-By: Express Content-Type: text/plain Connection: keep-alive Transfer-Encoding: chunked 28 Cannot POST /http://localhost:3000/enter 0

所以,问题似乎是行POST http://localhost:3000/enter HTTP/1.1 。 如果我发送头与该行改为POST /enter HTTP/1.1 ,它完美的作品!

我使用Chrome 15在Ubuntu 11.我也用Firefox 9尝试过。

提前致谢!

--------------解决方案-------------

这似乎都与形式是如何被提交,奇怪。

我误解了的语义<button>标记,并试图利用它在我的表像这样:

<form>
<button id="enter">Enter</button>
</form>

我创建了事件处理程序是这样的:

$('#enter').click(function(){ /* AJAX stuff... */ })

当我改变了HTML来

<form>
<input type="button" id="enter" value="Enter">
</form>

,它的工作正常。

然而,这并不完全清楚,我为什么它创建的错误。 它似乎有事情做与该按钮提交表单的事实。 如果有人可以解释这样对我,我会很感激的。

无论哪种方式,感谢您的答复!

您需要在按钮元素来定义类型的属性,以便它像一个按钮输入类型,如下所示:

<button id="enter" type="button">Enter</button>

大多数浏览器的默认按钮类型是“提交”。 这是无法保证的,虽然如此,它始终是指定类型是一个好主意。

分类:jQuery的 时间:2013-07-22 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.223 (s). 9 q(s)