2009-08-17 65 views
1
var err = ''; 

err += 'err a'; 
myString = 'Blah'; 
new Ajax.Request('/check_me.php', 
    { 
     method:'get', 
     parameters: { 
       'string': myString 
      }, 
      evalScripts: true, 
      onComplete: function(t){ 
       var response = t.responseText; 
       if (response == false) { 
        //do nothing 
       } else { 
        err += 'err b.\n'; 
        //alert(err); 
       } 
      } 
     }); 

err+= 'err c'; 

alert(err); 

在上面,它应该提醒“err a”+“err b”+“err c”。但我只是得到“犯错”+“错误c”。 如果我尝试在oncomplete中提醒(err),那么我可以看到文本被追加到它之前的任何值。在这种情况下,“err a”+“err b”。如果我关闭此警报框,最后警报框只显示 a和c。如何在Javascript中的函数内添加文本到变量?

因此它从全局变量读取值,但不写入它。

如何让它工作,即将其设置为“b”?

感谢

回答

5

Ajax请求同步发生,所以后您的Ajax调用已经出动,不论响应是否已返回的Javascript在网页上执行将继续。

因此,当您的脚本提醒err变量时,您得到的输出不是您所期望的,因为onComplete尚未被调用。

+0

那么我该怎么做? – TigerTiger 2009-08-17 13:50:50

+0

@Wbdvlpr - 在onComplete方法内完成调用之后,而不是在Ajax.Request之后放置任何想要发生的事情。 – karim79 2009-08-17 13:54:35

+0

任何想法如何跟踪何时完成结束?只是fyi ..如果我在完成功能中发出警报,那么这个警报框会在最后一个弹出框之前弹出。 – TigerTiger 2009-08-17 13:58:07

2

“err er er c err b”是正确的输出。订单是:

  • 附加“err a”;
  • 创建一个新的AjaxRequest,开始请求(异步)
  • 追加 “ERR C”
  • AjaxRequest完整偏偏追加 “ERR B”

您需要可以发出请求同步(不推荐),或者将“err c”的附加内容移到完整的方法中(如“err b”is)。

+0

这是否意味着您在上面所述的顺序中的最终警报(err)shoule打印?它没有。 – TigerTiger 2009-08-17 13:53:20

+0

just fyi ..输出的顺序对我来说并不重要 – TigerTiger 2009-08-17 13:53:52

相关问题