You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

S3存储桶图片在AWS API请求后无法在HTML页面更新

问题描述

页面设有X、Y两个数字输入框,用户输入数字并点击Calculate按钮后,页面底部显示的图片URL已正确切换至目标地址,但页面中的图片始终无法更新为对应图表;将该URL复制到新标签页可正常显示预期图片。

现有代码

HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>API Calculator</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <h1>API Calculator</h1>
    <form id="calculator-form">
        <label for="x">Enter value for x:</label>
        <input type="number" id="x" name="x" required>
        <br>
        <label for="y">Enter value for y:</label>
        <input type="number" id="y" name="y" required>
        <br>
        <button type="submit">Calculate</button>
    </form>
    <div id="result">
        <img id="result-image" src="https://s3.amazonaws.com/aerocastwx.com/image_requests/res_plot.png" alt="Result Image">

    </div>
    <div id="image-url">Image URL: </div>
    <script src="app.js"></script>
</body>
</html>

JavaScript代码

$(document).ready(function () {
    const form = $('#calculator-form');
    const resultDiv = $('#result');
    const resultImage = $('#result-image');

    form.on('submit', function (e) {
        e.preventDefault();

        const x = $('#x').val();
        const y = $('#y').val();

        const apiUrl = `https://xxx.execute-api.us-east-1.amazonaws.com/september12stage/calculator?x=${x}&y=${y}`;

        $.ajax({
            url: apiUrl,
            method: 'GET',
            dataType: 'json',
            success: function (data) {
            console.log(data);
        
            if (data && data.ans !== undefined) {
                var resultImage = $('#result-image');
                resultImage.attr('src', data.ans);
                resultImage.show();
        
                $('#image-url').text('Image URL: ' + data.ans);
            } else {
                console.error('Invalid API response:', data);
                resultDiv.html('Invalid API response');
                resultImage.hide();
            }
        },
            error: function (xhr, status, error) {
                console.error('Error fetching data from the API:', error);
                resultDiv.html('Error fetching data from the API');
                resultImage.hide();
            }
        });
    });
});
解决方案

问题核心是浏览器缓存机制:即使图片URL已更新,浏览器可能仍加载缓存中的旧图片,尤其是当新图片URL与旧URL文件名相同(如S3中覆盖同名称文件)或缓存未过期时。以下是三种解决方法:

  • 方法1:添加时间戳绕过缓存
    在图片URL后追加唯一时间戳参数,让浏览器认为是全新资源,强制重新请求:

    // 修改success回调中的src设置代码
    var resultImage = $('#result-image');
    const cacheBustedUrl = data.ans + (data.ans.includes('?') ? '&' : '?') + 't=' + new Date().getTime();
    resultImage.attr('src', cacheBustedUrl);
    resultImage.show();
    
  • 方法2:使用.prop()替代.attr()
    对于动态变化的DOM属性,jQuery的.prop()比.attr()更可靠:

    // 修改success回调中的src设置代码
    var resultImage = $('#result-image');
    resultImage.prop('src', data.ans);
    resultImage.show();
    
  • 方法3:先清空src再重新设置
    先清空图片src,再设置新URL,确保浏览器触发重新加载:

    // 修改success回调中的src设置代码
    var resultImage = $('#result-image');
    resultImage.attr('src', '');
    resultImage.attr('src', data.ans);
    resultImage.show();
    

内容的提问来源于stack exchange,提问作者Kevin Abbot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:17:46