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/loop 组合中访问我的 var 以及如何改变这个事实。

4

3 回答 3

3

AJAX 是异步的——因此,您的.append语句在help设置之前被命中。包括你append的成功方法:

success : function(data) {
    for(var i = 0; i < data.length; i++){
        help="test";
    }
    $("#id").append(help);
}
于 2013-10-31T13:17:47.707 回答
1

我猜根据您的评论,您想要实现的是...

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

或者

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

用一个doCallback方法。

function doCallback() {
    alert(help);
}
于 2013-10-31T13:25:07.800 回答
0

您没有得到预期的结果,因为您的 ajax 调用触发并继续执行,并且您的代码$("#id").append(help); 在设置帮助变量的成功编写的代码之前执行。

于 2013-10-31T13:18:17.657 回答