В jQuery.post, как я могу получить значение переменной вне функции? - PullRequest
0 голосов
/ 15 декабря 2009

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

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 изнутри функции?

UPDATE

Этот код НЕ дает новое значение переменной:

    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"

Ответы [ 2 ]

7 голосов
/ 15 декабря 2009

UPDATE

При работе с функциями обратного вызова важно обращать внимание на поток выполнения:

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. Звоните alert
  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
   });
}   
1 голос
/ 15 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...