javascript - 无法在ajax成功返回时更改图像onChange函数

标签 javascript jquery ajax

嗨,我是这个 javavascript/ajax 的新手。我正在尝试创建一个下拉列表,通过不同的选项动态更改图像,如Fiddle所示在这里,但更改功能似乎不起作用。

我确保能够从pictureList获取数据,但图像源没有像 fiddle 一样成功更改。

 $('#selectVariant').change(function () {     
    var sku = $('#selectVariant :selected').val();
    var sessionId="<?php echo $sessionId; ?>";
    var dataString='sku='+ sku +'&sessionId='+sessionId;
    $.ajax({
        type:"post",
        url: "<?php echo $base_url; ?>ajax-helper/search_variant.php",
        data:dataString,
        cache:false,
        dataType: "JSON",
        success: function(data){
        var pictureList = {};

        //example of my data list
        //var pictureList = {'Apple SKU2': "http://tos-staging-web-server-s3.s3.amazonaws.com/9/catalogue/apples_in_season.png",
        //'Pear1': "http://tos-staging-web-server-s3.s3.amazonaws.com/9/catalogue/pears.png"
        //};

        $.each(data.productVariantImages,function(i, productVariantImages){
            pictureList[data.sku] = this.imagePath;
        });
        console.log(pictureList);

        $('.content img').attr({"src":[pictureList[this.value]]}); 
        }
    });
        return false;
});

但是,当我在ajax post之外测试它时,它能够运行。

最佳答案

this 的实例在 ajax success 函数范围内发生变化。

在这一行中 $('.content img').attr({"src":[pictureList[this.value]]}); this 不是 selectVariant 元素的实例。

通常的做法是声明一个变量 that并在其他范围内使用该变量。尝试下面的代码。

$('#selectVariant').change(function () {     
    var sku = $('#selectVariant :selected').val();
    var sessionId="<?php echo $sessionId; ?>";
    var dataString='sku='+ sku +'&sessionId='+sessionId;
    var that = this;
    $.ajax({
        type:"post",
        url: "<?php echo $base_url; ?>ajax-helper/search_variant.php",
        data:dataString,
        cache:false,
        dataType: "JSON",
        success: function(data){
        var pictureList = {};

        //example of my data list
        //var pictureList = {'Apple SKU2': "http://tos-staging-web-server-s3.s3.amazonaws.com/9/catalogue/apples_in_season.png",
        //'Pear1': "http://tos-staging-web-server-s3.s3.amazonaws.com/9/catalogue/pears.png"
        //};

        $.each(data.productVariantImages,function(i, productVariantImages){
            pictureList[data.sku] = this.imagePath;
        });
        console.log(pictureList);

        $('.content img').attr({"src":[pictureList[that.value]]}); 
        }
    });
        return false;
});

关于javascript - 无法在ajax成功返回时更改图像onChange函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34080274/

相关文章:

javascript - 如何允许除数字之外的所有字符?

jquery - 首次运行的 Phonegap/jQM 应用程序具有非常小的文本和控件

javascript - 在菜单项单击时使用 Joomla 的完整 Ajax 刷新或加载背景图像

php - jQuery ajax 不会将 post 变量发送到 WordPress

javascript - 将更多信息拖入现有事件

javascript - 如何在 JavaScript 中检查一个字符串是否包含变量值?

javascript - 在 ng-click 上隐藏当前按钮

javascript - console.log 无法获取端口变量,我已经提供了屏幕截图

javascript - 单击 TD 时更改表格的行颜色

javascript - 当用户询问提示时扣除金币