我需要一种方法在服务器端解析我的JSONP对象以保存它,由于跨域原因问题我已经将我的通信方式从JSON转移到JSONP但没有找到任何合适的方法来解析服务器端的JSONP以节省它到数据库。
以下是模型,
define(['backbone'],function(Backbone){
'use strict';
return Backbone.Model.extend({
url:"http://crossdomain:9847/page",
defaults: {
type:'text',
position:0,
align:'left',
text:{"en":""},
color:"#000",
weight:'normal',
size:"14px",
font:"Verdana",
pageid:'askdkasdkgaskdgks'
},
idAttribute:'_id',
sync: function(method, collections, options) {
options.dataType = "jsonp";
return Backbone.sync(method, collections, options);
}
});
});
Express Server,
var express = require('/root/node_modules/express');
var page = require('./routes/page.js');
var app = express();
app.configure(function () {
app.use(express.json());
app.use(express.urlencoded());
app.set("jsonp callback", true);
})
app.get('/page', page.updatePage);
app.listen(9847);
exports.updatePage = function(req, res) {
console.log(req.query);
// Here how I can parse the req is my problem
// so I can save object to database?
}
网址正在生成,
http://crossdomain:9847/page?callback=jQuery203010156283635587138_1384408493698&{%22text%22:{%22en%22:%22Text%22},%22type%22:%22text%22,%22position%22:0,%22align%22:%22left%22,%22color%22:%22#000%22,%22weight%22:%22normal%22,%22size%22:%2214px%22,%22font%22:%22Verdana%22,%22pageid%22:%22askdkasdkgaskdgks%22}&_=1384408493700
我能够收到,
{ callback: 'jQuery203010156283635587138_1384408493698',
'{"text":{"en":"Text"},"type":"text","position":0,"align":"left","color":"': '' }
现在我该如何解析这个?我可以从callback参数获得回调,但是如何获取实际数据?
答案 0 :(得分:0)
您无法解析结果,因为它不是有效的JSON。你的问题可能在这一行:
app.set("jsonp callback", true);
这是您设置JSONP callback variable的位置,例如将其从默认的callback
更改为callbackVariable
。
只需注释掉那一行,你得到的JSONP就可以解析了。或者,您可能还需要修复Backbone如何构建JSONP URL。如果您改为使用http://crossdomain:9847/page?callback=jQuery203010156283635587138_1384408493698&type=text&position=0&align=left&color=%23000&weight=normal&size=14px&font=Verdana&pageid=askdkasdkgaskdgks
之类的网址,我相信它会起作用。 Backbone似乎在URL中的值中添加了额外的编码,这使解析更加困难。
最后,如果您需要帮助从已经解析为Javascript对象的(有效)JSON字符串中轻松选择特定值,请查看lodash中的许多有用函数。