变量赋值在函数内不起作用(Ajax,JS)

时间:2012-04-04 22:40:18

标签: jquery ajax asynchronous

我无法理解为什么变量“return”不起作用

$('.codeinput').change(function() {
var s_return="";        
var to_check=this.value ;

        $.ajax({
  type: "POST",
  url: "check.php",
  data: "code="+to_check}).done(function( msg ) {
    s_return=msg; // msg - variable work fine

});

// here variable "s_return" is unset
this.value=s_return;
});

我将不胜感激。

2 个答案:

答案 0 :(得分:2)

s_return=msg;

在异步函数中。当服务器响应时,它将被设置。

this.value=s_return;

在触发请求后立即运行。因此,s_return尚未设定。

你需要这样做:

$('.codeinput').change(function() {
    var that = this;
    var s_return="";        
    var to_check=this.value ;

    $.ajax({

      type: "POST",
      url: "check.php",
      data: "code="+to_check

    }).done(function( msg ) {
        that.value=msg;
    });

});

答案 1 :(得分:1)

AJAX调用以异步方式运行。如果您单步执行该操作,则会在this.value=s_return;之前看到s_return=msg;执行,因此当您执行this.value=s_return;分配时,s_return仍然为空。