Javascript 带有JSONP的Node.js(express.end())

Javascript 带有JSONP的Node.js(express.end()),javascript,node.js,jsonp,Javascript,Node.js,Jsonp,我有一个函数 User.prototype._send = function(type, code, message, callback) { if(!message && typeof code != 'number') { callback = message; message = code; code = 200; } if(typeof message != 'string') me

我有一个函数

User.prototype._send = function(type, code, message, callback) {
    if(!message && typeof code != 'number') {
        callback = message;
        message = code;
        code = 200;
    }

    if(typeof message != 'string')
        message = JSON.stringify(message);

    if(type == 'connection' && this.connection) {
        this.connection.writeHead(code || 200, {
            'Content-Type': 'application/json',
            'Content-Length': message.length
        });
        this.connection.end(message);
    } else {
        if(!this.listeners.length)
            return this.message_queue.push(arguments);

        var cx = this.listeners.slice(), conn;
        this.listeners = [];
        while(conn = cx.shift()) {
            conn.writeHead(code || 200, {
                'Content-Type': 'application/json',
                'Content-Length': message.length
            });
            conn.end(message);
        }
        if(callback) callback();
    }
};
它现在将JSON返回给客户机。但我希望它返回JSONP。我做了很多研究,试图用
.jsonp
替换
.end
,但它不起作用。

jsonp(“带填充的JSON”)是一种通信技术,不是另一种对象符号。 有关更多详细信息,请参阅

基本上,您的应用程序需要接受查询参数
jsonp
,并使用该参数或回调包装json消息,如下所示

var jsonpCallback = req.query.jsonp; //Assuming you are using express

message = JSON.stringify(message);

message = jsonpCallback + "(" + message + ");"
JSONP(“带填充的JSON”)是一种通信技术,不是另一种对象表示法。 有关更多详细信息,请参阅

基本上,您的应用程序需要接受查询参数
jsonp
,并使用该参数或回调包装json消息,如下所示

var jsonpCallback = req.query.jsonp; //Assuming you are using express

message = JSON.stringify(message);

message = jsonpCallback + "(" + message + ");"

正如user2840784所指出的,您需要回调才能使其工作。为了详细说明他们的答案,客户端库需要在发出请求时指定“客户端回调”,例如:

http://my-service.com/get-data.json?callback=callThisFunction
如果您在客户端使用jQuery,当您发出
$.ajax
请求时,jQuery将为您提供回调名称,因此您的请求如下所示:

http://my-service.com/get-data.json?callback=jQuery123456789
在幕后,jQuery秘密创建了一个名为
jQuery123456789
(或其他名称)的函数,用于在加载数据时处理数据

您必须做的是确保用回调函数名包装JSON输出,因此如果您的响应JSON如下所示:

{"a":1, "b":2}
jQuery123456789('{"a":1, "b":2}')
。。。然后您需要将其包装成如下所示:

{"a":1, "b":2}
jQuery123456789('{"a":1, "b":2}')
同样,正如user2840784所指出的,您可以从
req.query.jsonp
获取回调的名称

Hth,

Aaron

正如user2840784所指出的,您需要回调才能使其工作。为了详细说明他们的答案,客户端库需要在发出请求时指定“客户端回调”,例如:

http://my-service.com/get-data.json?callback=callThisFunction
如果您在客户端使用jQuery,当您发出
$.ajax
请求时,jQuery将为您提供回调名称,因此您的请求如下所示:

http://my-service.com/get-data.json?callback=jQuery123456789
在幕后,jQuery秘密创建了一个名为
jQuery123456789
(或其他名称)的函数,用于在加载数据时处理数据

您必须做的是确保用回调函数名包装JSON输出,因此如果您的响应JSON如下所示:

{"a":1, "b":2}
jQuery123456789('{"a":1, "b":2}')
。。。然后您需要将其包装成如下所示:

{"a":1, "b":2}
jQuery123456789('{"a":1, "b":2}')
同样,正如user2840784所指出的,您可以从
req.query.jsonp
获取回调的名称

Hth,

Aaron

我不明白这是浏览器端还是node.js。jquery在这里是如何涉及的。express中有
.jsonp
响应,但native node.js中没有。使用express
.jsonp
时,不需要设置标题。同样对于jsonp
内容类型
必须是
application/javascript
,我不明白这是浏览器端还是node.js。jquery在这里是如何涉及的。express中有
.jsonp
响应,但native node.js中没有。使用express
.jsonp
时,不需要设置标题。同样,对于jsonp
内容类型
必须是
应用程序/javascript
通常查询参数名为
回调
而不是
jsonp
,但只要它有适当的文档记录,这实际上并不重要。通常查询参数名为
回调
而不是
jsonp
,但只要有适当的文档记录,这其实并不重要。