将 jQuery JSON 对象发布到 NodeJs Restify
Posted
技术标签:
【中文标题】将 jQuery JSON 对象发布到 NodeJs Restify【英文标题】:Post jQuery JSON Object to NodeJs Restify 【发布时间】:2013-05-31 02:49:01 【问题描述】:我想知道为什么很难在/:parameter
中发布一个简单的 JSON 字符串来恢复。我遵循了很多例子,但没有找到任何具体的例子。
我在前端有如下代码。
$("#btnDoTest").click(function()
var jData =
hello: "world"
;
var request = $.ajax(
url: "http://localhost:8081/j/",
async: false,
type: "POST",
data: JSON.stringify(jData),
contentType: "application/javascript",
dataType: "json"
);
request.success(function(result)
console.log(result);
);
request.fail(function(jqXHR, textStatus)
alert("Request failed: " + textStatus);
);
);
如果我在j/
之后连接参数,我可以成功发送简单文本。但我要发送的是像 hello:"world"
这样的对象,然后在 nodeJS 中重新构建它并使用它。
--编辑:
This is my nodejs file
/* the below function is from restifylib/response.js */
var restify = require("restify");
/* create the restify server */
var server = restify.createServer(
);
server.use(restify.bodyParser( mapParams: true ));
server.use(
function crossOrigin(req,res,next)
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
return next();
);
server.post('/j/', function (req, res, next)
//res.send(201,"REceived body: "+JSON.stringify(req.params));
res.send(201,"REceived body: "+JSON.stringify(req.params));
return next();
);
var port = 8081;
server.listen(port);
console.log("Server listening on port " +port)
任何帮助将不胜感激。
0x
【问题讨论】:
【参考方案1】:我先回答!
jquery:
$.ajax(
url: url,
method: 'post',
data: JSON.stringify(key:value),
contentType: "application/json"
);
节点http:
server.post('/1', function(req, res)
var body = req.body;
var dataValue = body.dataKey;
);
为什么?
$.ajax 的数据只是发送到服务器端的数据,它的数据类型没有定义,所以当使用JSON.stringify(key:value)
时,数据会以字符串形式发送,例如 'key:"xxx"' ,并且节点接收到一个字符串,而不是一个 json 对象,即使字符串结构看起来像一个 json。但是当我们在$.ajax中添加contentType: "application/json"
后,node接收到的数据就是真正的json对象类型数据了。
【讨论】:
【参考方案2】:我终于搞定了。
--前端代码
$("#btnDoTest").click(function()
var request = $.ajax(
url: "http://localhost:3000/j",
async: false,
type: "POST",
data:
blob: wob:"1",job:"2", ar:[1,2,a:'b']
,
contentType: "application/x-www-form-urlencoded", //This is what made the difference.
dataType: "json",
);
request.success(function(result)
console.log(result);
);
request.fail(function(jqXHR, textStatus)
alert("Request failed: " + textStatus);
);
);
NodeJs 服务
/* the below function is from restifylib/response.js */
var restify = require("restify");
/* create the restify server */
var server = restify.createServer(
);
server.use(restify.bodyParser());
server.use(restify.CORS());
server.post('/j/', function(req, res, next)
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
// req.params == data on jquery ajax request.
res.send(200, JSON.stringify(req.params));
console.log(req.params.blob.ar[2].a)
res.end();
return next();
);
var port = 3000;
server.listen(port);
console.log("Server listening on port " + port)
【讨论】:
谢谢,'contentType: "application/x-www-form-urlencoded"' 对我也有用。【参考方案3】:不要把它串起来。试试这个,注意两个变化,我删除了JSON.stringify
并切换到application/json
,因为它的 JSON 而不是 JavaScript。
var request = $.ajax(
url: "http://localhost:8081/j/",
async: false,
type: "POST",
data: jData,
contentType: "application/json",
dataType: "json"
);
application/javascript
只能用于 JSONP。
【讨论】:
我已经尝试过这样的事情。它不起作用。我在帖子中看到了一些奇怪的行为,因为它被这样请求:/OPTIONS/j 也许为时已晚,但如果您仍然不知道,请尝试在您的 ajax 上使用 crossDomain: true 作为选项以上是关于将 jQuery JSON 对象发布到 NodeJs Restify的主要内容,如果未能解决你的问题,请参考以下文章
将 jQuery JSON 对象发布到 NodeJs Restify
如何将 JSON 对象从 Python 脚本发送到 jQuery?
如何将带有 JSON、jQuery 的复杂对象数组发布到 ASP.NET MVC 控制器?