2017-10-20 220 views
0

I'have和AJAX POST请求:AJAX后和页面刷新

$(document).ready(function() { 
    $("span").click(function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    var URL = "someURL"; 
    $.post(URL, this.id, function(data, status) { 
     var val = parseInt(document.getElementById(this.data).innerHTML) 
     document.getElementById(id).innerHTML = val + 1 ; 
     document.getElementById(id).disabled=true; 
    }); 
    }); 
}); 
<a href="/book/test/1">Read</a> 
<span id="${book.id}"> 

这个脚本工作正常;数字在其中的按钮增加1。 问题是:

  • 刷新页面。在按钮上单击它将重新加载页面上的所有内容。
  • 我不能改变

总之我需要一个计数按钮,增加1,可以按用户一旦改变之后禁用按钮。

更新似乎重新加载它的相关定义为

$(document).ready(function() {

所以我有一个在体内,一个在头另一功能。

+1

在跨度的点击处理程序中调用'$(this).off('click')'来阻止用户再次单击它。您的示例中没有任何内容会导致页面重新加载,因此我们无法提供任何帮助。 –

+0

我会试一试。也许不是页面重新加载,但只有js的功能。我读过的内容可能是由于js中的问题。我试图添加JSFiddle而没有成功 – Vanko

+0

那么'id'是什么? – epascarello

回答

1

当然,它刷新页面,你发送一个链接去通过href。相反,删除href,并放置一个onclick事件和处理程序。替换你的锚标记,用这个:

<a onclick="runFunction()">Read</a> 

并用此替换你的脚本。

<script> 
function runFunction(){ 
$(document).ready(function(){ 
    $("span").click(function(e){ 
     e.preventDefault(); 
     e.stopPropagation(); 
     var URL="someURL"; 
     $.post(URL, 
     this.id, 
     function(data,status){ 
      var val = parseInt(document.getElementById(this.data).innerHTML) 
      document.getElementById(id).innerHTML = val + 1 ; 
      document.getElementById(id).disabled=true; 
     }); 
    }); 
}); 
} 
</script> 
+0

OP将事件处理程序附加到“span”,而不是“a”。你的示例中的'runFunction()'将附加事件处理程序,但它只会对连续的点击执行任何实际工作,但会重复该点击处理程序。如果你想这样做,我建议使用一个不引人注目的事件处理程序。 –