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

Php 在jQuery.post中,如何获取函数外部变量的值?,php,jquery,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"); 当我在函数中时,如何获取img的值 如何从

我有以下功能:

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
    的值
  • 如何从函数内部设置t
    img=新值

  • 更新

    此代码不会为变量提供新值:

        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
  • 呼叫
    $。发布
  • 呼叫
    警报
  • 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
       });
    }   
    

    更新

    使用回调函数时,请务必注意执行流:

    var img = "nice.jpg";
    
    $.post('/path', { key: value }, function(data){
       img = "newname.jpg";
    });
    
    alert(img); // Alerts "nice.jpg"
    
    这是因为在回调之后(但不是在回调函数中)发生的任何代码都是首先执行的:

  • img
    设置为
    nice.jpg
  • 呼叫
    $。发布
  • 呼叫
    警报
  • 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
       });
    }   
    

    您应该能够准确地执行您在函数中拥有的操作-全局变量在函数中是可见的,除非已经声明了同名的局部变量。

    您应该能够准确地执行您在函数中拥有的操作-全局变量在函数中是可见的,除非已经声明了同名的局部变量。

    好的,这是可行的。但是我无法设置
    img=data.newValue
    。为什么我只能读取数据而不能设置数据?@Steven,我补充了更多的解释,解释了为什么设置变量时会遇到问题。我理解顺序。但我没有得到的是如何在jQuery.post之后检索新值。看我上面的例子(和你的差不多)@Steven,只要把你的警报移到回调函数里面就行了。是的,我知道这是有效的。问题是,我需要在代码的后面使用这个新值——在回调函数之外。好的,这样就行了。但是我无法设置
    img=data.newValue
    。为什么我只能读取数据而不能设置数据?@Steven,我补充了更多的解释,解释了为什么设置变量时会遇到问题。我理解顺序。但我没有得到的是如何在jQuery.post之后检索新值。看我上面的例子(和你的差不多)@Steven,只要把你的警报移到回调函数里面就行了。是的,我知道这是有效的。问题是我需要在回调函数之外的代码中进一步使用这个新值。