Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数不向其他函数返回值_Javascript_Jquery_Ajax_Html - Fatal编程技术网

Javascript 函数不向其他函数返回值

Javascript 函数不向其他函数返回值,javascript,jquery,ajax,html,Javascript,Jquery,Ajax,Html,尝试编写从文本文件读取数据的函数。该函数工作正常,但我想在其他函数中读取其数据。有人能帮我告诉我如何将y的值返回到read()函数吗 函数read(){ $.get(“version.txt?\u ts=“+new Date().getTime(),函数(数据){ var y1=parseInt(数据[0]); var y2=parseInt(数据[1]); 变量y=(y1*10)+y2; 返回y; }); } 函数drr(){ var d=read(); 文件编写(d); } 不起作用 这样

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


函数read(){
$.get(“version.txt?\u ts=“+new Date().getTime(),函数(数据){
var y1=parseInt(数据[0]);
var y2=parseInt(数据[1]);
变量y=(y1*10)+y2;
返回y;
});
}
函数drr(){
var d=read();
文件编写(d);
}
不起作用
这样做:

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()调用的返回值,它不是从服务器收到的响应,而是一个请求对象。

$。get是异步函数,不返回read函数,您需要使用callback:

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

}

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

$.get(url, callback) 
$get
方法点击
url
并将结果传递给回调方法,但不返回结果。由于AJAX是异步的,
回调
不会立即被调用,而是会发生如下情况:

  • 调用
    $.get
  • read
    方法继续(在您的情况下会退出,因为没有其他代码)
  • $.get
    从服务器接收响应
  • 如果服务器成功获取数据,则调用
    回调
    函数
  • 在上述顺序中,第二个步骤可以与其之后的任何步骤交换。尽管如此,该序列还是要表明
    读取
    方法退出时与数据处理发生时之间没有关系。因此,如果您需要对结果执行某些操作(在页面上显示),那么您应该在
    回调
    方法中执行此操作

    下面是一个已编辑的示例,其中包含您的代码:

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

    可能重复的Please read Simply put无法从ajax请求返回值。。。您需要使用回调。。。阅读上面的链接,看看它是如何实现的。有没有办法将txt值输出到drr()函数?我必须用这个值来画一张图如果你愿意的话你可以把txt赋值给某个全局变量,但是在它被设置成一个值之前你不能用这个,对吗?因此,要绘制图形,只需调用draw函数而不是document.write(txt);实际上,为了绘制图形,我想通过在循环中调用该函数来更新值。因此,如果有可能定期调用函数并获得新值,我可以绘制图表。但我对此感到困惑,结果值没有更新。它的打印0使用带有async:false和cache:false选项的$.ajax。由于get在默认情况下是异步的,因此它在调用success函数之前返回。
     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);
                }