我有一个代码,在从数据库获取信息后,它应该将变量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);
}
}
答案 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);
}
}
}
});