如何从函数中获取变量(){$ .get()返回变量;功能?在jquery?

时间:2017-05-20 10:44:02

标签: javascript jquery scope

我试图从函数中获取变量。此函数包含一个$.get()函数。这是代码:

$(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);
   });

});

我试图解析.txt文件以获取其内容。

2 个答案:

答案 0 :(得分: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);
      });
  });

});

答案 1 :(得分:0)

该调用是async,您无法从该ajax调用中足够快地返回值。您应该做的是为您的方法添加callback

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

        callback(value)
    });
}

现在您可以将回调附加到方法

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