В jQuery.post, как мне получить значение переменной внешней функции?

У меня есть следующая функция:

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"); 
  1. Как я могу получить значение img когда я внутри функции?
  2. Как я могу установить 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" 

Это связано с тем, что выполняется любой код, следующий после обратного вызова (но не в функции обратного вызова):

  1. Установите img на nice.jpg
  2. Вызовите $.post
  3. Звонок
  4. Установите img в newname.jpg

Оригинальный ответ:

Если код, который вы используете, существует точно так же, как вы его разместили, то:

  1. img уже доступен внутри вашей анонимной функции обратного вызова.
  2. Да, вы также можете изменить значение 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 }); } 

Вы должны быть в состоянии сделать именно то, что у вас есть – глобальные переменные видны внутри функций, если уже не существует локальной переменной с тем же именем.