使用jQuery返回XML文件内容

时间:2012-11-26 00:30:54

标签: javascript jquery ajax file-io

我想使用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,即使我在本地这样做。

1 个答案:

答案 0 :(得分:1)

stackoverflow answer regarding handling of $.ajax calls有一个很好的例子可以使用它。可以稍微修改此示例,以便为您提供接近您要查找的内容。

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;

}

希望有所帮助。