jQuery POST总是失败

时间:2014-01-17 07:19:51

标签: jquery json node.js express http-headers

我使用Express创建了一个Node.js服务器,配置非常简单:

var express = require('express');

var app = express();

app.configure(function() {
    app.use(express.urlencoded());
    app.use(express.json());
    app.use(express.cookieParser());
});

app.post('/login', function(req, res) {
    res.json({foo: 'bar'});
});

app.listen(3000);

经过检查,这里是Firefox记录的关于/login路由的网络请求的数据:

Request URL:    http://localhost:3000/login
Request Method:     POST
Status Code:    HTTP/1.1 200 OK

以下是请求标题:

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0
Pragma: no-cache
Origin: null
Host:   localhost:3000
Content-Type:   application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 36
Connection: keep-alive
Cache-Control:  no-cache
Accept-Language:    en-US,en;q=0.5
Accept-Encoding:    gzip, deflate
Accept: application/json, text/javascript, */*; q=0.01

据我所知,到目前为止,一切似乎都很好。但是,在我的jQuery代码中,始终会调用fail()回调:

$.ajax({
    type: 'POST',
    url: 'http://localhost:3000/login',
    data: {foo: 'bar'},
    dataType: 'json'
})
.done(function() {
    console.log('done');
})
.fail(function() {
    console.log('fail');
});

这是我的回复标题:

X-Powered-By:   Express
Transfer-Encoding:  chunked
Date:   Fri, 17 Jan 2014 07:12:01 GMT
Connection: keep-alive

如何配置我的Express或jQuery设置以正确处理JSON响应?

1 个答案:

答案 0 :(得分:0)

试试这个:

$.ajax({
   type: 'POST',
   url: 'http://localhost:3000/login',  ///<------do this
   data: {foo: 'bar'},
   dataType: 'jsonp',  //<---for cross domain json data access
   contentType:"application/json; charset=utf-8"  //<----add this
})
.done(function() {
   console.log('done');
})
.fail(function() {
   console.log('fail');
});

检查您的服务器是否设置了正确的标头 Access-Control-Allow-Origin

header("Access-Control-Allow-Origin: http://yourdomain-you-are-connecting-from.com/");

更新

对于跨域json,可以使用jsonp dataType进行数据访问。

来自文档:

<强> JSONP

如果网址包含字符串“callback =?” (或类似的,由服务器端API定义),请求被视为JSONP。有关更多详细信息,请参阅$ .ajax()中有关jsonp数据类型的讨论。