2

私は次のような機能を持っています

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 を返してほしい。私は多くの研究を行い、置き換えようとしましたが、うまくいき.endませ.jsonpん。

4

2 に答える 2

3

JSONP("JSON with padding") は通信技術であり、別のオブジェクト表記ではありません。詳細については、 http://en.wikipedia.org/wiki/JSONPを参照してください。

基本的に、アプリケーションはクエリ パラメータを受け入れ、jsonp以下に示すようにそのパラメータまたはコールバックで json メッセージをラップする必要があります。

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

message = JSON.stringify(message);

message = jsonpCallback + "(" + message + ");"
于 2013-10-03T04:44:09.713 に答える
1

user2840784 が指摘しているように、これを機能させるにはコールバックが必要です。彼らの答えを詳しく説明するには、クライアント ライブラリは、リクエストを行うときに「クライアント側のコールバック」を指定する必要があります。次に例を示します。

http://my-service.com/get-data.json?callback=callThisFunction

クライアント側で jQuery を使用している場合、jQuery はリクエストを行うときにコールバック名を提供する$.ajaxため、リクエストは次のようになります。

http://my-service.com/get-data.json?callback=jQuery123456789

舞台裏で、jQuery はjQuery123456789データがロードされたときにデータを処理する名前 (または何か) を持つ関数を秘密裏に作成します。

あなたがしなければならないこと、あなたのJSON出力がコールバック関数名でラップされていることを確認することです.

{"a":1, "b":2}

...次に、次のようにラップする必要があります。

jQuery123456789('{"a":1, "b":2}')

繰り返しますが、user2840784 が指摘したように、からコールバックの名前を取得できますreq.query.jsonp

Hth、
アーロン

于 2013-10-03T04:51:24.073 に答える