首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript从函数获取变量

JavaScript从函数获取变量
EN

Stack Overflow用户
提问于 2012-10-30 20:58:59
回答 3查看 1.2K关注 0票数 5

我不是JavaScript的专业人士,我已经在互联网上搜索了很长时间。

我在从另一个函数获取变量时遇到了问题。我的代码如下所示:

代码语言:javascript
复制
var variabeltje;
$.post('js/ajax/handle_time.php', {'time': $(this).find('input').val()},
  function(data) {
    alert(data);
    variabeltje=data;
  }
);
alert(window.variabeltje);

变量variabeltje必须从数据中获取信息。当我将警报放在variabeltje=data下面时,它正在工作,但我需要函数后面的数据变量。

编辑:

我把它改成了人们所说的,我现在有了:

代码语言:javascript
复制
                var XHR = $.post('js/ajax/handle_time.php', {time: $(this).find('input').val()});
                XHR.done(function(data) {
                    console.log(data); 
                    getData(data);
                }); 

                function getData(data) {
                if(data == 'true') {
                    alert(data);
                    $(this).unbind('keypress');
                    $(this).html($(this).find('input').val());
                }
                }

但是现在$(this)没有传递到函数中。我该如何解决这个问题呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-30 21:11:03

因为它是异步的,所以数据只有在ajax调用完成后才可用,所以您必须修改代码以使用它,并等到ajax完成后再执行您的操作:

代码语言:javascript
复制
var XHR = $.post('js/ajax/handle_time.php', {time: $(this).find('input').val()});

XHR.done(function(data) {
    console.log(data);
});

或者在其他函数中:

代码语言:javascript
复制
function XHR(time){
   return $.post('js/ajax/handle_time.php', {time: time});
}

function doStuff(element) {
    XHR($(element).find('input').val()).done(function(data) {
        console.log(data);
    });
}

编辑:

根据您的编辑,它看起来像是一个作用域问题:

代码语言:javascript
复制
var self = this,
    XHR = $.post('js/ajax/handle_time.php', {time: $(self).find('input').val()});

XHR.done(function(data) {
    console.log(data); 
    getData(data);
}); 

function getData(data) {
    if(data == 'true') { //normally you'd try to pass true as a boolean, not string
      alert(data);
      $(self).unbind('keypress').html($(self).find('input').val());
    }
}
票数 4
EN

Stack Overflow用户

发布于 2012-10-30 21:01:49

这是因为$.post方法异步运行。

请在SO上看看this question

编辑:您可以更改代码,并将post方法后的部分放入成功触发的匿名函数的主体中。如下所示:

代码语言:javascript
复制
$.post('js/ajax/handle_time.php', {'time': $(this).find('input').val()},
  function(data) {
    alert(data);
    variabeltje=data;
    alert(window.variabeltje); // or whatever function you need to call, call it here...
  }
);
票数 2
EN

Stack Overflow用户

发布于 2012-10-30 21:01:32

问题是post方法是异步执行的。这就是说,post被发送到服务器,但执行流程仍在继续,因此您的警报正在尝试访问一个未设置的值,因为post尚未返回。

如果需要同步执行,可以使用ajax方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13139522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档