我使用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响应?
答案 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数据类型的讨论。