2017-05-20 114 views
0

我想从一个函数中获取一个变量。这个函数里面包含一个$.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文件,以获得其内容。

回答

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

非常感谢它'工作! – Anonymouse

+0

完美!你是天才:) – Anonymouse

0

该呼叫是async,您无法从ajax呼叫中足够快地返回一个值。你应该做的就是添加一个callback到你的方法

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

     callback(value) 
    }); 
} 

现在你可以附加一个回调方法

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

ssc-hrep3谢谢你这个快速的repley代码是完美的工作! – Anonymouse