如何在 Ajax 完成时更新数据属性

How to update data attribute on Ajax complete

我正在使用 October CMS,在框架中我可以使用以下 HTML 元素进行 AJAX 调用:

<a href="#" class="sbutton" data-request="onSavedeal" 
     data-request-data="deal_ID:'14779255',type:'local',active:'0'">
    <i class="material-icons pink-text listfavorite">favorite</i>                      
</a>

每当在收藏夹按钮上单击此 link 时,都会触发对控制器 "onSavedeal" 的更新。更新数据库在第一次点击时工作正常。但是,更新后,"data-request-data" 属性的值不会更新,因此该按钮对后续点击不起作用。

我需要更改 link,以便 "active:'0'" 变为 "active:'1'"。生成的完整元素将是

<a href="#" class="sbutton" data-request="onSavedeal" 
     data-request-data="deal_ID:'14779255',type:'local',active:'1'">
    <i class="material-icons pink-text listfavorite">favorite</i>                      
</a>

在框架中,我可以添加另一个名为 "data-request-success" 的属性,它在成功完成 AJAX 调用后执行 javascript 函数(或代码)。我如何制作一个名为 "updateactive()" 的函数,它会在 0 和 1 之间切换活动值。最终元素应如下所示:

<a href="#" class="sbutton" data-request="onSavedeal" 
     data-request-data="deal_ID:'14779255',type:'local',active:'0'"
     data-reuqest-success="updateactive();">
    <i class="material-icons pink-text listfavorite">favorite</i>                      
</a>

如果您可以通过具有值 onSavedeal 的属性 data-request 安全地识别此 a 元素,您将按如下方式编写 updateactive 函数:

function updateactive() {
    var newAttrValue = "deal_ID:'14779255',type:'local',active:'1'";
    $('[data-request="onSavedeal"]').attr('data-request-data', newAttrValue);
 }

别忘了将 data-reuqest-success 更正为 data-request-success

更新 如果页面上有很多 a 元素,您可以像下面这样重用相同的函数。检查演示 - Fiddle .

function updateactive() {
    var clickedA = event.currentTarget,
        newAttrValue = $(clickedA).attr('data-request-data').replace("active:'0'", "active:'1'");

    $(clickedA).attr('data-request-data', newAttrValue);
}

以这种方式更改您的锚标记

<a href="#" class="sbutton" data-request="onSavedeal" 
 data-request-data="deal_ID:'14779255',type:'local',active:'0'"
 data-reuqest-success="updateactive(this);">
<i class="material-icons pink-text listfavorite">favorite</i>                      

注意变化 updateactive(this);

然后在你的jquery中你可以这样定义函数。

 function updateactive(element) {        
    $(element).attr('data-request-data', $(element).attr('data-request-data').replace("active:'0'", "active:'1'"));
}