【问题标题】:Using jquery ajax to update dynamically created image by GET使用 jquery ajax 通过 GET 更新动态创建的图像
【发布时间】:2013-05-11 14:43:33
【问题描述】:

我目前的工作情况是这样的:

<!-- collect user info -->
<form method="GET">
    <input name="param1" type="text" />
    <input name="param2" type="text" />
    <input type="submit" />
</form>

<!-- display image based on user info -->
<img src="color.php?param1=<?php echo $_GET['param1']; ?>param2=<?php echo $_GET['param2']; ?>" alt="" />

这是完美的工作。现在我只想要由 ajax 更新的图像,而 HTML 的其余部分保持不变。我试过这个:

<form method="GET" id="formId">
    <input name="param1" type="text" />
    <input name="param2" type="text" />
    <input type="submit" />
</form>

<div id="result"></div>

<script type="text/javascript">
    var frm = $('#formId');
    frm.submit(function(){
        $.ajax({
            type: 'GET',
            success: function () {
                $('#result').html('<img src="color.php?' + frm.serialize() + '" />');
            }
        });
        return false;
    });
</script>

事实上,这个解决方案或多或少都有效。但是,我在这里有一些问题:

  1. 这是好的 jquery / ajax 代码还是很傻(是的,我是 jquery 新手)?
  2. 仅当其中一个字段发生更改时,“结果”字段才会更新。我可以在点击提交按钮时更新它吗?
  3. 我想在 color.php 计算图片时显示一个旋转的 load.gif。我这样尝试过,没有成功:
var ajax_load = "<img class='loading' src='img/load.gif' alt='loading...' />";
$('#result').html(ajax_load).html('<img src="color.php?' + frm.serialize() + '" />');

谢谢!

【问题讨论】:

    标签: php html ajax jquery


    【解决方案1】:

    在 jQuery ajax 调用中添加参数 cache : false,强制刷新图像。要使用加载器,只需使用属性 src。复制/粘贴代码:

    <form method="GET" id="formId">
        <input name="param1" type="text" />
        <input name="param2" type="text" />
        <input type="submit" />
    </form>
    
    <div id="result">
         <img id="preview" src="img/load.gif" />
    </div>
    
    <script type="text/javascript">
        var frm = $('#formId');
        frm.submit(function(){
            $('#preview').attr('src', 'img/load.gif' );
            $('#preview').attr('src', 'color.php?' + frm.serialize() + '&_' + new Date().getTime() );
            return false;
        });
    </script>
    

    【讨论】:

    • 感谢您的帮助。我试过了,但似乎还是有问题。使用“cache: false”和附加的“
    • 我刚刚发现您的 ajax 调用没有 url。检查我更新的答案。(看起来你不需要 ajax 请求)
    • 非常好,谢谢!几乎完美,只是 color.php 只有在对表单进行更改后才会加载。
    • 对,你可以修复在 frm.serlialize() "+ '&_' + new Date().getTime()" 之后添加这个,让浏览器认为是一个新请求。 (查看我更新的答案)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 2016-05-28
    • 2012-04-06
    相关资源
    最近更新 更多