Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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 - Fatal编程技术网

Javascript变量不保留值

Javascript变量不保留值,javascript,jquery,ajax,Javascript,Jquery,Ajax,可能重复: 我有一个函数,可以在线从文件中读取数字数据。虽然文件被正确检索(由警报显示的值证明),但当我尝试将其设置为output然后返回output时,会得到一个未定义的结果 我尝试过范围界定教程,但没有成功。我做错了什么 function readFileFromWeb() { var output; jQuery.get('http://domain.com', function(data) { alert(data); output =

可能重复:

我有一个函数,可以在线从文件中读取数字数据。虽然文件被正确检索(由警报显示的值证明),但当我尝试将其设置为output然后返回output时,会得到一个未定义的结果

我尝试过范围界定教程,但没有成功。我做错了什么

function readFileFromWeb() {
    var output;

    jQuery.get('http://domain.com', function(data) {
        alert(data);
        output = data;
    });

    return output;
}

下面是如何通过回调函数完成的

function readFileFromWeb(callback) {
    jQuery.get('http://domain.com', function(data) {
        callback && callback(data);
    });
}

// ...

readFileFromWeb(function (data) {
    alert(data);
});
这是因为
jQuery.get
是一个异步函数,即它在执行时不会阻塞,因此会立即返回。这就是为什么
jQuery.get
函数需要回调函数的原因,这样一旦AJAX查询返回,它就会启动回调函数


因此,在实现自己的
readFileFromWeb
函数时,您需要使用相同的回调模式。

下面是如何通过回调函数完成的

function readFileFromWeb(callback) {
    jQuery.get('http://domain.com', function(data) {
        callback && callback(data);
    });
}

// ...

readFileFromWeb(function (data) {
    alert(data);
});
这是因为
jQuery.get
是一个异步函数,即它在执行时不会阻塞,因此会立即返回。这就是为什么
jQuery.get
函数需要回调函数的原因,这样一旦AJAX查询返回,它就会启动回调函数


因此,在实现自己的
readFileFromWeb
函数时,您需要使用相同的回调模式。

它是异步的,我对您的代码进行了注释,以帮助您了解事情发生的顺序

function readFileFromWeb(callback) {
    jQuery.get('http://domain.com', function(data) {
        callback && callback(data);
    });
}

// ...

readFileFromWeb(function (data) {
    alert(data);
});
function readFileFromWeb() {
    //1. create variable.
    var output;

    //2. make ajax call.
    jQuery.get('http://domain.com', function(data) {
        alert(data);

        //4. set variable from ajax callback
        output = data;
    });

    //3. return variable.
    return output;
}

它是异步的,我对您的代码进行了注释,以帮助您理解事情发生的顺序

function readFileFromWeb() {
    //1. create variable.
    var output;

    //2. make ajax call.
    jQuery.get('http://domain.com', function(data) {
        alert(data);

        //4. set variable from ajax callback
        output = data;
    });

    //3. return variable.
    return output;
}


欢迎来到异步的精彩世界!菲利克斯克林:当我在那个问题下看到你的名字时,我震惊了片刻/这里有两种方法可以实现您想要的功能:1)使您的AJAX同步2)实现基于计时器的功能,该功能将等待响应为您想要使用的变量赋值。@MarcellFülöp这两种方法都很糟糕。我建议理解和接受异步性。@MarcellFülöp我不是在说你,我是在向其他人推荐。如果人们不理解异步,我建议他们先理解它。方法是不返回,而是传递/使用回调。或者回报一个承诺。欢迎来到异步的精彩世界!菲利克斯克林:当我在那个问题下看到你的名字时,我震惊了片刻/这里有两种方法可以实现您想要的功能:1)使您的AJAX同步2)实现基于计时器的功能,该功能将等待响应为您想要使用的变量赋值。@MarcellFülöp这两种方法都很糟糕。我建议理解和接受异步性。@MarcellFülöp我不是在说你,我是在向其他人推荐。如果人们不理解异步,我建议他们先理解它。方法是不返回,而是传递/使用回调。或者返回一个承诺。你能描述一下它的作用吗
callback&&callback(数据)?如果回调作为参数传递,它就会执行,不是吗?是的,我正在使用逻辑运算符中使用的短路机制,仅在回调包含truthy值时调用
Callback
。请注意,如果
回调
不是函数,则此代码仍将失败,因为我没有验证它。我明白了,10倍于此,谢谢大家的有见地的评论!如果我理解正确的话:1。我使用一个函数(对结果进行处理)作为参数调用readFileFromWeb。2.readFileFromWeb执行异步get,然后调用回调,这是我们定义的匿名函数。这是对的吗?@KangHeong:是的。另外请记住,
readFileFromWeb
函数会立即返回,因为
jQuery.get
会立即返回。您能描述一下
回调和回调(数据)的作用吗?如果回调作为参数传递,它就会执行,不是吗?是的,我正在使用逻辑运算符中使用的短路机制,仅在回调包含truthy值时调用
Callback
。请注意,如果
回调
不是函数,则此代码仍将失败,因为我没有验证它。我明白了,10倍于此,谢谢大家的有见地的评论!如果我理解正确的话:1。我使用一个函数(对结果进行处理)作为参数调用readFileFromWeb。2.readFileFromWeb执行异步get,然后调用回调,这是我们定义的匿名函数。这是对的吗?@KangHeong:是的。还要记住,
readFileFromWeb
函数会立即返回,因为
jQuery.get
会立即返回。+1用于列出评估顺序。+1用于列出评估顺序。