У меня есть следующая функция:
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"
ОБНОВИТЬ
При работе с функциями обратного вызова важно обратить внимание на поток выполнения:
var img = "nice.jpg"; $.post('/path', { key: value }, function(data){ img = "newname.jpg"; }); alert(img); // Alerts "nice.jpg"
Это связано с тем, что выполняется любой код, следующий после обратного вызова (но не в функции обратного вызова):
img
на nice.jpg
$.post
img
в newname.jpg
Оригинальный ответ:
Если код, который вы используете, существует точно так же, как вы его разместили, то:
img
уже доступен внутри вашей анонимной функции обратного вызова. img
внутри функции. Когда вы объявляете переменную с ключевым словом var
, она является частной для ее текущей области, но доступна для любых других контекстов, содержащихся в ее области:
РАБОТАЕТ
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 }); }
Вы должны быть в состоянии сделать именно то, что у вас есть – глобальные переменные видны внутри функций, если уже не существует локальной переменной с тем же именем.