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

In case someone is looking for an solution that does not involve callbaks

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

Then you can use it like this

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) {}作为 传递给get_json()函数fn(),当数据准备好时,fn()将调用它,允许您获取 JSON。

于 2013-10-18T02:30:31.713 回答