我有以下功能:
var id = "10";
var type = "Type A";
var img = "myimage.jpg";
jQuery.post("my/path/somefile.php", { instance: 'getUrl', ID : id, type: type},
function(data)
{
jQuery('#logo').attr("src",data.url + img);
},"json");
img
的值?img = new value
?更新
此代码不会为变量赋予新值:
logoUrl = "noLogo.png";
jQuery.post("my/path/somefile.php", { instance: 'getUrl', ownerID : "123", type: "brand"},
function(logo)
{
logoUrl = logo.url + "logo/";
},"json");
alert(logoUrl); // This outputs noLogo.png"
答案 0 :(得分:7)
<强>更新强>
使用回调函数时,注意执行流程很重要:
var img = "nice.jpg";
$.post('/path', { key: value }, function(data){
img = "newname.jpg";
});
alert(img); // Alerts "nice.jpg"
这是因为在回调之后发生的任何代码(但不在回调函数中)都是先执行的:
img
设为nice.jpg
$.post
alert
img
设为newname.jpg
原始回答:
如果您使用的代码与您发布的代码完全相同,那么:
img
已在您的匿名回调函数中可用。img
的值。使用var
关键字声明变量时,它对其当前范围是私有的,但可用于其范围内包含的任何其他上下文:
<强> WORKS 强>
function getPost(){
var img = "nice.jpg";
$.post('/path', {key:value}, function(data){
alert(img); // alerts "nice.jpg"
});
}
不工作
function changeImage(){
var img = "nice.jpg";
getPost();
}
function getPost(){
$.post('/path', {key:value}, function(data){
alert(img); // img is undefined
});
}
答案 1 :(得分:1)
你应该能够完全按照那里所做的那样 - 除非已经声明了同名的局部变量,否则全局变量在函数内部是可见的。