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”。但我只是得到“err a”+“err c”。如果我尝试使用 oncomplete 发出警报(错误),那么我可以看到文本被附加到它之前的任何值。在这种情况下,“错误 a”+“错误 b”。如果我关闭这个警报框,最后一个警报框,只会显示 a 和 c。

所以它是从全局变量中读取值而不是写入它。

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

谢谢

4

2 回答 2

5

Ajax 请求是异步发生的,因此在您的 ajax 调用被分派后,页面上的 Javascript 将继续执行,无论是否返回响应。

所以当你的脚本警告err变量时,你得到的输出不是你期望的,因为onComplete还没有被调用。

于 2009-08-17T13:49:16.963 回答
2

“err a err c err b”是正确的输出。顺序是:

  • 附加“错误一个”;
  • 创建一个新的 AjaxRequest,它启动请求(异步)
  • 附加“错误c”
  • AjaxRequest 完成发生附加“err b”

您需要使请求同步(不推荐)或将“err c”的附加内容移动到完整方法中(如“err b”)。

于 2009-08-17T13:50:48.477 回答