函数不返回其他函数的值

试图编写一个从文本文件中读取数据的函数。 该函数工作正常,但我想在其他函数中读取其数据。 有人可以帮我告诉如何将y的值返回到read()函数

     function read() { $.get("version.txt?_ts=" + new Date().getTime(), function (data) { var y1 = parseInt(data[0]); var y2 = parseInt(data[1]); var y = (y1 * 10) + y2; return y; }); } function drr() { var d = read(); document.write(d); }  not working  

在您的代码中,您正在使用AJAX通过JQuery:

 $.get(url, callback) 

$get方法命中url并将结果传递给回调方法,它不会返回它。 由于AJAX是异步的,因此不会立即调用callback ,而是发生以下情况:

  1. $.get被调用
  2. read方法继续(在你的情况下退出,因为没有其他代码)
  3. $.get从服务器接收响应
  4. 如果服务器成功获取数据,则callback函数

在上面的序列中,第二步可以与其后的任何步骤交换。 尽管如此,该序列表明read方法退出数据处理发生时之间没有关系 。 因此,如果您需要对结果执行某些操作(在页面上显示),那么您应该在callback方法中执行此操作。

以下是使用您的代码编辑的示例:

 function read() { $.get("version.txt?_ts=" + new Date().getTime(), function(data) { var y1 = parseInt(data[0]); var y2 = parseInt(data[1]); var y = (y1*10)+y2; document.write(y); }); } 

除了AJAX的异步性质之外,您的代码还有另一个问题。 在read方法中,您希望返回一个值,但实际上它不会返回任何值。 这使得drr函数无效。

这样做:

 function read() { $.get("version.txt?_ts=" + new Date().getTime(), function(data) { var y1= parseInt(data[0]); var y2= parseInt(data[1]); var y= (y1*10)+y2; document.write(y); /* this is the change, process the result when it's received here */ }); } function drr() { read(); } 

也将html更改为更合适的语法

  

通常,当你有$ .ajax()调用时,它是异步的 – 当成功处理请求时,会发出请求并执行成功处理程序。

因此,如果您使用ajax()调用的返回值,则不是从服务器接收的响应,而是请求对象。

$ .get是异步函数,读取函数没有返回,需要使用回调:

 function read(callback) { $.get("version.txt?_ts=" + new Date().getTime(), function(data) { var y1 = parseInt(data[0]); var y2 = parseInt(data[1]); var y = (y1 * 10) + y2; callback(y); }); } function drr() { read(function(txt) { document.write(txt); }); } 

试试这个。

  function read() { var result=0; $.get("version.txt?_ts=" + new Date().getTime(), function (data) { var y1 = parseInt(data[0]); var y2 = parseInt(data[1]); var y = (y1 * 10) + y2; result=y; }); return result; } function drr() { var d = read(); document.write(d); }