函数不返回其他函数的值
试图编写一个从文本文件中读取数据的函数。 该函数工作正常,但我想在其他函数中读取其数据。 有人可以帮我告诉如何将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
,而是发生以下情况:
-
$.get
被调用 -
read
方法继续(在你的情况下退出,因为没有其他代码) -
$.get
从服务器接收响应 - 如果服务器成功获取数据,则
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); }