3

我想使用 JavaScript/jQuery 读取本地文件的内容。我知道这经常被讨论,但我的示例有点不同,因为我想在获取完成后返回内容,而不是操作 HTML。

我不想谈论安全问题和本地文件,因为这段代码是为了在我自己的浏览器中运行(Chrome,我以 --allow-file-access-from-files 标志开头)。

我有以下功能来获取数据...

function readData() {
    $.ajax({
        type: "GET",
        url: "data.xml",
        async: false, // this does not change the outcome
        dataType: "xml",
        success: function(xml) {
            // Got the data, find entries and return them.
            console.log("Returning data");
            var doc = $(xml).find('entry');
            // This is where most examples manipulate dom, I want to
            // return the data instead
            return doc;
        }
    });
}

现在我想做...

var xmlDoc = readData();
// undefined, why?

并将文档放在变量中。相反,我变得不确定。似乎该函数在获取文件之前返回。或者也许我对变量范围有问题?

有谁知道如何做到这一点?是的,我确定我想使用 JavaScript,即使我在本地执行此操作。

4

1 回答 1

1

关于处理 $.ajax 调用的stackoverflow 答案有一个很好的例子,说明了一个很好的使用方法。这个例子可以稍微修改一下,给你一些接近你正在寻找的东西。

function xhr_get(url) {

  return $.ajax({
    url: url,
    type: 'get',
    dataType: 'xml',
    beforeSend: showLoadingImgFn
  })
  .always(function() {
    // remove loading image maybe
  })
  .fail(function() {
    // handle request failures
  });

}

上述方法的植入实例为:

xhr_get('/index').done(function(data) {
  // do stuff with index data
});

xhr_get('/id').done(function(data) {
  // do stuff with id data
});

你可能想要这样的东西:

function readData() {
    var returnData;

    xhr_get('data.xml').done(function(data) {
        returnData = data;
    });

    return returnData;

}

希望有帮助。

于 2012-11-26T00:49:11.397 回答