使用jquery通过ajax在json中定位数据标记

时间:2016-01-27 15:56:45

标签: jquery json ajax

我有一个简单的ajax调用返回一些运行良好的json但是我很难在之后用jquery选择元素。这是因为它们加载ajax的方式?

在此阶段,我尝试做的只是警告其中一个数据元素的内容'数据投票'

<div id="list-latest" class="pagelist"></div>
<script>
 $(function () 
  {
   $.ajax({                                      
     url: 'http://example.com/go.php',                  
     data: "",                        
     dataType: 'json',                  
     success: function(data)          
       {
         var $grouplist = $('#list-latest');
         $.each(data, function() {

           $('<div class="tile-item"><a href="javascript:void(0);" onclick="alertme();" class="allinfo" data-votes="' + this.votes + '" data-views="' + this.Views '" >link</a></div>').appendTo($grouplist);

         });
       }

      });


    }); 

<script type='text/javascript'>
  function alertme(){
    alert($(this).attr("#data-votes"));
  }
</script>

是否与我试图选择(这个)的方式有关? 目前它只是返回&#39; undefined&#39;

感谢

1 个答案:

答案 0 :(得分:0)

问题是因为this函数中alertme()的引用是window,而不是引发click事件的元素。您需要将引用作为参数传递给函数。另请注意,检索data属性的语法略有不同。试试这个:

$('<div class="tile-item"><a href="javascript:void(0);" onclick="alertme(this);" class="allinfo" data-votes="' + this.votes + '" data-views="' + this.Views '" >link</a></div>').appendTo($grouplist);
function alertme(el){
   alert($(el).data("votes"));
}

应该注意的是,使用Javascript连接事件是更好的做法。在这种情况下,您需要一个委托事件处理程序,因为有问题的元素在加载后会动态地附加到DOM。此方法意味着处理程序中的this引用将引用引发该事件的元素。试试这个:

$(function() {
    $.ajax({                                      
        url: 'http://example.com/go.php',                  
        data: "",                        
        dataType: 'json',                  
        success: function(data) {
            var $grouplist = $('#list-latest');
            $.each(data, function() {
                $('<div class="tile-item"><a href="#" class="allinfo" data-votes="' + this.votes + '" data-views="' + this.Views '">link</a></div>').appendTo($grouplist);
            });
        });
    }

    $grouplist.on('click', '.allinfo', function(e) {
        e.preventDefault();
        alert($(this).data("votes"));
    });
});