在jQuery.post中,如何获取变量外部函数的值?

时间:2009-12-14 23:56:03

标签: php jquery

我有以下功能:

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
  3. 更新

    此代码不会为变量赋予新值:

        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 个答案:

答案 0 :(得分:7)

<强>更新

使用回调函数时,注意执行流程很重要:

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
  5. 原始回答:

    如果您使用的代码与您发布的代码完全相同,那么:

    1. img已在您的匿名回调函数中可用。
    2. 是的,您也可以在函数内部更改img的值。
    3. 使用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)

你应该能够完全按照那里所做的那样 - 除非已经声明了同名的局部变量,否则全局变量在函数内部是可见的。