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呼び出しの処理に関するスタックオーバーフローの回答には、これを使用できる優れた方法の良い例があります。この例は、探しているものに近いものを提供するために少し変更することができます。

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 に答える