jQuery POST 总是失败

标签 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

这是请求 header :

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');
});

这就是我的响应 header 的样子:

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

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

最佳答案

试试这个:

$.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');
});

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

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

更新:

对于跨域json数据访问可以使用jsonp dataType来完成。

来自文档:

JSONP

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

关于jQuery POST 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21180039/

相关文章:

node.js - npm installsaitek -g 不断安装错误的依赖项

jquery - 使用 jquery 在多组下拉列表中选择第一个选项

javascript - 使用 Promise 在循环内调用 ajax

javascript - 在 JavaScript 中长按?

javascript - 浏览器和终端( Node )中的 console.log(typeof)

javascript - 如何创建一个模拟来扩展 Jest 中的实际模块

javascript - 根据选择选项显示输入

json - 质疑如何在Golang中将mongodb的命令转换为Bson

java - Jackson - 将接口(interface)反序列化为枚举

json - PostgreSQL引入JSONB的解释