【问题标题】:How to switch displayed image after AJAX process?AJAX处理后如何切换显示的图像?
【发布时间】:2018-03-21 08:28:47
【问题描述】:

我想在 AJAX 请求完成后从显示的图像切换到另一个。

这里是 AJAX 调用的代码:

<script type="text/javascript">
$(document).ready(function(){
$('.item').click(function(){
    var $id = $(this).attr('data-id');
    $.ajax({
            type: "POST",
            url: "test.php",
            data: { id: $id },
            success: //
          })
    });
});
</script>

这是 HTML:

<div class="item" data-id="1"><img src="image1.png" /></div>

如果显示image1.png,我想改为显示image2.png

如果显示image2.png,我想改为显示image1.png

请帮我填写 AJAX 进程中的success 部分。

【问题讨论】:

    标签: javascript jquery html ajax xmlhttprequest


    【解决方案1】:

    您可以使用.find() 方法查找子图像,然后使用.attr() 获取和设置src 属性的属性。

    所以在AJAX调用之前,先找到图片:

    var image = $(this).find('img');
    

    然后在success函数中,检查src属性并使用attr()设置:

    success: function(data) {
        if (image.attr('src') == 'image1.png') {
          image.attr('src', 'image2.png');
        } else {
          image.attr('src', 'image1.png');
        }
    }
    

    请看下面的例子:

    var urls = [
      "https://i.stack.imgur.com/C92ci.png?s=32&g=1", //image1.png
      "https://www.gravatar.com/avatar/8911010cdec4bb9d56b83b6bbbb1f341?s=32&d=identicon&r=PG"
    ];
    $(document).ready(function() {
      //demonstration container- for AJAX request response
      var questionsContainer = $('#questions');
      $('.item').click(function() {
        var $id = $(this).attr('data-id');
        var image = $(this).find('img');
        $.ajax({
          url: "https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow",
          success: function(data) {
            var index = urls.indexOf(image.attr('src'));
            image.attr('src', urls[Math.abs(index-1)]);
            /*if (image.attr('src') == urls[0]) {
              image.attr('src', urls[1]);
            } else {
              image.attr('src', urls[0]);
            }*/
            questionsContainer.html('# of Questions: ' + data.items.length);
          }
        });
        questionsContainer.html('...');
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="item" data-id="1"><img src="https://www.gravatar.com/avatar/8911010cdec4bb9d56b83b6bbbb1f341?s=32&d=identicon&r=PG" /></div>
    <div id="questions">Click the image to load # of questions</div>

    【讨论】:

      【解决方案2】:

      希望这会有所帮助。如果需要,我们可以使用切换 jquery 功能在这两个图像之间切换。

      <script type="text/javascript">
          $(document).ready(function(){
          $('.item').click(function(){
              var $id = $(this).attr('data-id');
              var $imgId = $('.item img').attr('src');
              $.ajax({
                      type: "POST",
                      url: "test.php",
                      data: { id: $id , ImageId :$imgId },
                      success: function(data){
                        if(ImageId == 'image1.png'){   
                           $(this).attr('src', 'image2.png');                    
                         }
          			else{
          				 $(this).attr('src', 'image1.png');
          			}
                      }
                    })
              });
          });
          </script>

      【讨论】:

      • 我需要 $iddata-id 用于 PHP 脚本中的另一个目的(数据库插入/更新)。图像的类别始终为item。有没有办法在成功部分编码这个简单的条件? if [image1.png = displayed] then [display image2.png] else [display image1.png]
      • 是的。我认为我们无法在成功功能中检查 img1 是否显示。我们只能检查它是否是 img1。会按照你说的尝试处理它,给我分钟。
      • 我想做的是类似于 Instagram 或 twitter 中的心形图标:用户可以点击它来喜欢或不喜欢帖子。一切都很好,除了单击后不会更改的图标。我设法在每次点击后重新加载页面(并要求数据库知道要显示哪个图标),但我不喜欢这个解决方案......
      • 您只需要更改图标的颜色对吗?你为什么不使用 css 来实现这一点而不是做这一切呢?无论如何更新了我的代码,如果您有任何问题,请告诉我。
      • 不,有两个不同的图标(对于其他一些项目,图标将完全不同)。关于您的代码的最后更新,它不起作用,因为 data: { id: $id } 消失了。我可以这样做吗:data: { id: $id, $id: imgId }
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      相关资源
      最近更新 更多