2013-10-31 54 views
0

我有两个例子。请告诉我为什么我的变量help在这个例子中没有按照预期工作。我检查它正在进入循环。

结果:undefined

function autopop(){ 
    var help; 
    $.ajax({ 
     type : "POST", 
     url : "/cgi-bin/my.pl", 
     data : "action=autopop", 
     dataType : "json", 
     success : function(data) { 
      for (var i = 0; i < data.length; i++) { 
       help = "test"; 
      } 
     } 
    ); 

    $("#id").append(help); 
} 

结果:test

function autopop() { 
    var help = "test"; 
    $.ajax({ 
     type : "POST", 
     url : "/cgi-bin/my.pl", 
     data : "action=autopop", 
     dataType : "json", 
     success : function(data) { 
      for (var i = 0; i < data.length; i++) { 
       help = "blub"; 
      } 
     } 
    ); 

    $("#id").append(help); 
} 

请告诉我为什么我不能从这个AJAX /循环组合中,以及如何我可以改变这个事实访问我的变种。

+2

这是由于AJAX请求的异步性质,与其他1,092,938,932,893次相同。 –

+0

@tymeJV是对的。关键是要记住它是异步的。如果你不知道这意味着什么,请快速阅读。 – j0hnstew

+1

我不认为有必要降低这一点。至少他已经把他尝试过的并且正在寻求帮助。这比其他数以百万计的“给我答案”的帖子要好得多。 –

回答

1

我猜测,根据您的意见,你想达到什么是这个...

success : function(data) { 
    $("#id").append(data); 
} 

success : function(data) { 
    help = data; 
    doCallback(); 
} 

随着doCallback方法。

function doCallback() { 
    alert(help); 
} 
+0

不,但谢谢你的猜测 - 请阅读下面的评论。追加只是测试是否写入var的最简单方法。我需要在ajax成功块中设置一个变量。 – eye

+0

查看更新的答案 –

3

AJAX是异步 - 正因为如此,设置help之前你.append语句被击中。包括你的append成功的方法中:

success : function(data) { 
    for(var i = 0; i < data.length; i++){ 
     help="test"; 
    } 
    $("#id").append(help); 
} 
+0

感谢您的解释 - 追加只是一个可能性测试结果的变种在这个例子中,与问题无关......问题是在ajax成功块中填充一个var。你知道有什么方法可以等待块完成吗?或者任何其他方式来使这个工作? – eye

+0

将回调函数传递给调用ajax的函数,并将任何想要的内容传递给成功块中的内容。至于在成功块中填写一个变量,你已经这么做了。 – tymeJV

0

你没有得到预期的结果,因为你的Ajax调用火灾,会继续执行,你的代码$("#id").append(help); 写在成功的代码,设置辅助变量之前执行。

+0

非常感谢您的解释。现在我知道它为什么不起作用 - 但我怎样才能在ajax成功块中设置一个var以备后用? – eye

+0

添加你需要在成功回调调用之后执行的代码,它将在成功时执行。通常,您将使用由呼叫返回的结果而不是您设置的值。 – Surender

相关问题