使用jQuery返回XML文件内容

问题描述:

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

我不想谈论安全问题和本地文件,因为此代码旨在在我自己的浏览器(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

这里的问题是readData没有返回任何值,你的成功函数是。我不确定它可以用ajax /回调模型的结构来做到这一点 –

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; 

} 

希望有所帮助。