2017-05-20 28 views
0

私は関数から変数を取得しようとしています。この関数には$.get()関数が含まれています。私はそのコンテンツを取得するために.txtファイルを解析しようとしている

$(function() { 
    var valiable = ''; 
    function functionName(string) { 
     var file = "lang.txt"; 
     $.get(file, function (txt) { 
      var lines = txt.split("\n"); 
      for (var i = 0, len = lines.length; i < len; i++) { 
       if ($.trim(lines[i]) == string) { 
        valiable = lines[i]; 
       } 
      } 
     }); 
     return valiable; 
    } 

    $('#button').on('click',function() { 
    var variable = functionName(string); 
    console.log(variable); 
    }); 

}); 

:ここでは、コードです。

答えて

0

$.get()は非同期なので、内容を成功ハンドラの出力変数に保存するだけで済みます。次に、ボタンクリックハンドラからこの格納された値にアクセスします。この場合、ページの読み込み機能を実行します。これには欠点があります。ボタンをクリックするとデータを準備できず、ページを再読み込みしてデータを再度取得する必要があります。

$(function() { 
    var output = ''; 

    function functionName() { 
     var file = "lang.txt"; 
     $.get(file, function(txt) { 
      var lines = txt.split("\n"); 
      output = lines.join(""); 
     }); 
    } 
    functionName(); 

    $('#button').on('click', function() { 
     console.log(output); 
    }); 

}); 

ボタンをクリックしてファイルのロードを実行する場合は、成功ハンドラ関数(コールバック)を引数として渡すことができます。 successHandler関数は、データとの引数を持ち、$.get()が実行された後に呼び出されます。したがって、ボタンのクリックリスナーで、ロードされたデータがどうなるかを定義することができます。呼び出し

$(function() { 
    function functionName(successHandler) { 
     var file = "lang.txt"; 
     $.get(file, function(txt) { 
      var lines = txt.split("\n"); 
      var output = lines.join(""); 
      successHandler(output); 
     }); 
    } 

    $('#button').on('click', function() { 
     functionName(function(data) { 
     console.log("this is the data: " + data); 
     }); 
    }); 

}); 
+0

メソッドにコールバックを追加することができているあなたに非常にそれ 'sの作品をありがとうございました! – Anonymouse

+0

パーフェクト!あなたは天才です:) – Anonymouse

0

は、あなたがそのAJAX呼び出しから十分に速く値を返すことができない、asyncです。あなたがすべきことは、あなたの方法

function fn(callback) { 
    var value; 
    $.get('lang.txt', function(data) { 
     ... 

     callback(value) 
    }); 
} 

callbackを追加して、今、あなたは

fn(function(value) { 
    console.log(value); 
}); 
+0

ssc-hrep3この高速リプレイコードはありがとうございます! – Anonymouse

関連する問題