【问题标题】:Replace a button with another using jquery and ajax使用 jquery 和 ajax 将按钮替换为另一个按钮
【发布时间】:2016-09-01 01:42:42
【问题描述】:

我有一个小问题,我试图解决但没有成功,希望你们能帮助我。

所以我有一个按钮,一旦点击它就应该调用一个 Ajax 函数,并将其自身替换为从 Ajax 获得的成功响应。

到目前为止我的 html 代码:

<div class="btn-group">
<button id="button1" class="btn btn-white btn-xs" onclick="like(83,1)">
<i class="fa fa-heart-o"></i>
 J'aime !
</button>
</div>

和 jquery 部分:

function like(id, t) {

    $.ajax({
        type: "GET",
        url: "ajax/likes.php?postID=" + id + "&likeID=" + t,
        dataType: 'html',
        success: function(data) {
            $("#button" + t).replaceWith(data);
        }

    });
}

单击并调用 Ajax 函数有效,我可以从开发者控制台看到所需 HTML 的响应,但原始响应没有被替换。

响应看起来像这样:

<button id='button1' class='btn btn-white btn-xs 1' onclick='like(83,1)'>
<i class='fa fa-heart'></i>
 J'aime plus         
</button>

谢谢!

【问题讨论】:

  • 能否请您 console.log(data) 并检查您是否得到正确的响应?如果你得到正确的,那么你可以在你的替换代码中尝试 $.parseHTML(data) 。
  • 感谢 vijayP,$.parseHTML(data) 对我来说很有魅力!
  • 太棒了@Anass...!

标签: jquery ajax


【解决方案1】:

相同的代码

请检查ajax.success中变量t的值。

var buttonsPlus = ["<button id='button1' class='btn btn-white btn-xs' onclick='like(83,1)'>\n\r<i class='fa fa-heart'></i> \nJ'aime plus\n</button>","<button id='button2' class='btn btn-white btn-xs' onclick='like(83,2)'><i class='fa fa-heart'></i> David plus</button>"];

function like(likes, index){
  // simulate ajax call
  setTimeout(function(){
    $('#button'+index).replaceWith(buttonsPlus[index-1]);
  }, 1000);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="btn-group">
<button id="button1" class="btn btn-white btn-xs" onclick="like(83,1)">
<i class="fa fa-heart-o"></i>
 J'aime !
</button>
<button id="button2" class="btn btn-white btn-xs" onclick="like(83,2)">
<i class="fa fa-heart-o"></i>
 David !
</button>
</div>

编辑#2:

尝试将ajax.dataTypehtml更改为text/plain

【讨论】:

    【解决方案2】:

    建议你尝试使用 jQuery 的 click(),而不是使用 onclick 属性。

    或许你可以试试下面的结构,

    var ids; //set equal to number of id's in total
    
    for (let i = 0; i < ids; i++) {
        $("button" + i).click({id: 83}, function() {
            callback(i, event.data.id);
        }
    }
    ...
    function callback(i,t){
      return function(){
        $.ajax({
                type: "GET",
                url: "ajax/likes.php?postID=" + t + "&likeID=" + i,
                dataType: 'html',
                success: function(data) {
                $("#button" + i).replaceWith(data);
                }
            });
        }
    }
    

    编辑:有一种方法可以通过 click() 传递参数。请参阅jQuery's .click - pass parameters to user function 以获得更详尽的解释。

    【讨论】:

    • 谢谢,但我不能使用 jQuery 的 click(),因为我有很多使用不同 id 生成的按钮,我必须将参数传递给函数以知道点击了哪个按钮并将其替换为正确的代码
    • 按钮 id (id="button1") 可能会得到不同的数字,例如 button2 button3 button4,如果您有一个想法以及如何获得它,将不胜感激。谢谢
    • 刚刚又更新了答案。它假设按钮 id 后缀按数字顺序排列。如果数据中存在间隙(即 1、2、3、5、9),那么我建议将所有按钮 id 值放入一个数组中并对其进行迭代。我还假设“t”是跟踪 id 后缀的值,考虑到“button1”已设置为 1。
    • 感谢您的努力,但如果用户单击同一个按钮 2 次,代码将假定它用于下一个按钮,因为每次单击时 i 都会递增!
    • 对。使用回调应该可以解决这个问题。
    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多