将AJAX的响应仅传递给数组

时间:2016-04-01 14:05:43

标签: javascript jquery html arrays ajax

我设法用单一的当前得分制作简单的投票系统。一切都很好,但问题是当我点击一个按钮为这个特定的内容投票时 - 其他div中的所有分数也会改变!我需要AJAX才能在当前div(视频投票)上输出成功的答案而不是我页面上的所有内容!我认为是因为:

success: function(html) {
    $('.this').html(html);
}

那是因为我的页面上有一系列的块:

<div id="main">
    <div class="box1">
        <a href="" class="vote" id="<?php echo $mes_id; ?>" name="up">
            <img class='image'src="img/thumbsup.png">
        </a> 
        <span class='this'><?php echo $total_score; ?></span> 
        <a href="" class="vote" id="<?php echo $mes_id; ?>" name="down">
            <img class='image' src="img/icon-down.png">
        </a>
    </div>
    <div class='box2' ><?php echo $msg; ?></div>
</div>

跨越课程&#39;这个&#39;,当成功时,AJAX会对所有人做出响应,但我需要识别它们并仅对当前的响应添加响应(跨越课程&#39;这个&# 39;,这基本上是当前投票的分数),这样当用户投票时 - 只有当前分数变化。不是所有的人! (如果他们所有人都有班级&#39;这就是我从AJAX传递响应。为每个块(div)创建一个特定的类是无稽之谈,因为我创建了一个显示来自数据库的视频的页面 - 任何数! 这里是ajax和jquery:

<script type="text/javascript">
$(function() {
$(".vote").click(function() 
{  
var id = $(this).attr("id");
var name = $(this).attr("name");
var dataString = 'id='+ id ;
var acdc = $('#ab').attr('class');
var potato = 'potato';
var parent = $(this);
if(name=='up')
{ 
$.ajax({
type: "POST",
url: "up_vote.php",
data: dataString,
cache: false,
success: function(html){

$('.this').html(html);
}}); 
}
else
{
$(this).fadeIn(200).html('<img src="img/icon-down.png" align="absmiddle"     style="height: 10px;width:10px;">');
$.ajax({
type: "POST",
url: "down_vote.php",
data: dataString,
cache: false,
success: function(html){ 
$('.this').html(html);
}}); 
}
return false;
});

});
 </script>

那么,我该如何做到?(仅改变当前得分)非常感谢!提前。

2 个答案:

答案 0 :(得分:1)

你不能在成功函数中使用$(this),因为它会随着调用$(this)的上下文而改变,你必须将它存储在var中,然后在你的ajax成功中使用它如下所示:

<script type="text/javascript">
    $(function () {
        $(".vote").click(function ()
        {
            var id = $(this).attr("id");
            var name = $(this).attr("name");
            var dataString = 'id=' + id;
            var acdc = $('#ab').attr('class');
            var potato = 'potato';
            var parent = $(this);

            if (name == 'up')
            {
                $.ajax({
                    type: "POST",
                    url: "up_vote.php",
                    data: dataString,
                    cache: false,
                    success: function (html) {
                        parent.parent().find('.this').html(html);
                    }});
            }
            else
            {
                $(this).fadeIn(200).html('<img src="img/icon-down.png" align="absmiddle"     style="height: 10px;width:10px;">');
                $.ajax({
                    type: "POST",
                    url: "down_vote.php",
                    data: dataString,
                    cache: false,
                    success: function (html) {                        
                        parent.parent().find('.this').html(html);
                    }});
            }
            return false;
        });

    });
</script>

答案 1 :(得分:0)

您尚未显示代码,但可能是在点击 o.s.r.i.StatefulRetryOperationsInterceptor - Executing proxied method in stateful retry public abstract void org.springframework.amqp.rabbitlistener.SimpleMessageListenerContainer$ContainerDelegate.invokeListener(Channel,Message) throws java.lang.Exception(55435ee) 元素时触发了AJAX请求。如果是这种情况,您可以存储引发事件的元素的引用,然后使用DOM遍历查找兄弟.vote并更改它的HTML。像这样:

.this