0

我需要一种在服务器端解析我的 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);
          }
    });

});

快递服务器,

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?
}

URL正在生成,

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":"': '' }

现在我该如何解析这个?我可以从回调参数中获取回调,但是如何获取实际数据?

4

1 回答 1

0

您无法解析结果,因为它不是有效的 JSON。您的问题可能在这一行:

app.set("jsonp callback", true);

这是您设置JSONP 回调变量的地方,例如将其从默认值callback改为 be 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我相信它会工作的 URL。Backbone 似乎在 URL 中的值中添加了额外的编码,这使得解析更加困难。

最后,如果您需要帮助轻松地从已解析为 Javascript 对象的(有效)JSON 字符串中挑选特定值,请查看lodash中的许多有用函数。

于 2013-11-21T04:37:00.803 回答