函数不返回其他函数的值

时间:2013-12-11 08:32:34

标签: javascript jquery ajax html5

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

<!DOCTYPE html>
<html>

    <head>
        <script charset="utf-8" src="jquery-2.0.3.min.js"></script>
        <script type="text/javascript">
            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);
            }
        </script>

        <body onload=read()>not working</body>

</html>

4 个答案:

答案 0 :(得分:1)

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

$.get(url, callback) 

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

  1. $.get被称为
  2. read方法继续(在您的情况下退出,因为没有其他代码)
  3. $.get收到服务器的回复
  4. 如果服务器成功获取数据,则调用callback函数
  5. 在上面的序列中,第二步可以与之后的任何步骤交换。不过,这个序列是为了表明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函数无效。

答案 1 :(得分:0)

这样做:

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更改为更合适的语法

<body unload="read();">

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

所以如果你使用ajax()调用的返回值,它不是从服务器收到的响应,而是一个请求对象。

答案 2 :(得分:0)

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

}

答案 3 :(得分:0)

试试这个。

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