jquery无法设置变量

时间:2015-07-24 10:59:54

标签: javascript jquery function variables

我有一个代码,在从数据库获取信息后,它应该将变量newcolorid设置为从数据库获取的id。如您所见,我在函数之前定义了变量,但在设置新的id之后,它仍然保持不变。基本上在控制台中我看到了新的id,但是在功能完成后,它会将它恢复为0.可能是什么问题?

var newcolorid = 0;

$.ajax({
    url: "/colors",
    dataType: "json",
    success: function(data) {
        var newcolors = [];
        jQuery.each(data.colors, function (i, elem){
            newcolors.push([elem.color_code, elem.label, elem.id]);
        });
        for(var i=0;i<newcolors.length;i++){
            if(newcolors[i][1]==label){
                newcolorid = newcolors[i][2];
                console.log(newcolorid);
                break;
            }
        }
    }
});

for (var i = 0; i < spectrums.length; i++) {
    if (spectrums[i]) {
        var spectrumPalette = spectrums[i].option("palette");
        spectrumPalette.push([[rgb, label, newcolorid]]);
        spectrums[i].option("palette", spectrumPalette);
    }
}

1 个答案:

答案 0 :(得分:2)

这是因为你的循环在后端返回值之前执行,因此当它运行时,该值不变。

后端调用是异步的(除非另有设置),这意味着它们不会阻止脚本其余部分的执行,并在收到后端回复时执行。

如果要使用新值或将该代码移动到从成功回调调用的函数中,则需要在成功回调中移动代码。

var newcolorid = 0;

$.ajax({
    url: "/colors",
    dataType: "json",
    success: function(data) {

        var newcolors = [];

        jQuery.each(data.colors, function (i, elem){
            newcolors.push([elem.color_code, elem.label, elem.id]);
        });

        for(var i = 0; i<newcolors.length; i++){
            if(newcolors[i][1]==label){
                newcolorid = newcolors[i][2];
                console.log(newcolorid);
                break;
            }
        }

        for (i = 0; i < spectrums.length; i++) {
            if (spectrums[i]) {
                var spectrumPalette = spectrums[i].option("palette");
                spectrumPalette.push([[rgb, label, newcolorid]]);
                spectrums[i].option("palette", spectrumPalette);
            }
        }
    }
});