3

URLからJSONを解析できる関数を作成しようとしています。これが私がこれまでに持っているものです:

function get_json(url) {
    http.get(url, function(res) {
        var body = '';
        res.on('data', function(chunk) {
            body += chunk;
        });

        res.on('end', function() {
            var response = JSON.parse(body);
                return response;
        });
    });
}

var mydata = get_json(...)

この関数を呼び出すと、エラーが発生します。この関数から解析された JSON を返すにはどうすればよいですか?

4

3 に答える 3

12

誰かがコールバックを含まないソリューションを探している場合

    function getJSON(url) {
        var resp ;
        var xmlHttp ;

        resp  = '' ;
        xmlHttp = new XMLHttpRequest();

        if(xmlHttp != null)
        {
            xmlHttp.open( "GET", url, false );
            xmlHttp.send( null );
            resp = xmlHttp.responseText;
        }

        return resp ;
    }

次に、このように使用できます

var gjson ;
gjson = getJSON('./first.geojson') ;
于 2014-06-18T20:11:39.410 に答える
9

あなたのは何の役return response;にも立ちません。関数を引数として に渡しget_json、結果を受け取ることができます。次に、の代わりにreturn response;、関数を呼び出します。したがって、パラメータの名前が の場合はcallback、そうしますcallback(response);

// ----receive function----v
function get_json(url, callback) {
    http.get(url, function(res) {
        var body = '';
        res.on('data', function(chunk) {
            body += chunk;
        });

        res.on('end', function() {
            var response = JSON.parse(body);
// call function ----v
            callback(response);
        });
    });
}

         // -----------the url---v         ------------the callback---v
var mydata = get_json("http://webapp.armadealo.com/home.json", function (resp) {
    console.log(resp);
});

関数をコールバックとして渡すことは、NodeJS を使用する際に理解するために不可欠です。

于 2013-10-18T02:31:14.610 に答える
5

HTTP 呼び出しは非同期であるため、結果の値を取得するにはコールバックを使用する必要があります。return非同期関数での呼び出しは、実行を停止するだけです。

function get_json(url, fn) {
  http.get(url, function(res) {
    var body = '';
    res.on('data', function(chunk) {
      body += chunk;
    });

    res.on('end', function() {
      var response = JSON.parse(body);
      fn(response);
    });
  });
};

get_json(url, function(json) {
  // the JSON data is here
});

この例では、 がとして関数にfunction(json) {}渡され、データの準備ができるとが呼び出され、JSON をフェッチできるようになります。get_json()fn()fn()

于 2013-10-18T02:30:31.713 に答える