php中的jQuery ajax调用while循环仅返回第一个id

时间:2018-10-16 08:51:47

标签: php jquery

我正在研究wordpress插件,该插件每隔几秒钟就会更新一次股价。我在html表格中显示股票价格,该表格在php循环中执行,该表格以wordpress帖子的形式获取股票。在我的代码中,我需要帖子的标题,才能调用获取特定股价的函数。

<?php  $query = new WP_Query( $args );
   if ($query->have_posts()) :
     $i = 1;
   while ($query->have_posts()) : $query->the_post();
?>

<td class="name"><?php the_title(); ?></td>
<td class="price" id="<?php echo $i; ?>" value="<?php echo get_the_title(); ?>"></td>

我想将特定股票发布的ID传递给jQuery ajax函数。

jQuery(document).ready( function($){
   setInterval(callMe, 5000);
});

function callMe(){
  var id = $('.price').attr("id");
  var titleInput = jQuery('#' + id).attr("value");

  $.ajax({
         type: 'POST',
         url: ajax_object.ajaxurl,
         dataType: 'json',
         data: {
              action: 'myaction',
              post_title: titleInput
         },
         success: function(response){
                    $('#' + id).html(response);
     }
 });
}

这仅返回第一个id,然后也仅传递第一个帖子标题,而不传递其他帖子。

问题仅在于我如何调用ID?我在玩我如何调用var id的方法,但是无法使其正常工作。

var id = $('.price').attr("id");

如果您对如何解决此问题有一些建议,请提供帮助。

1 个答案:

答案 0 :(得分:0)

$('.price')返回一个集合,虽然有一些函数(如.css())直接对它们进行操作,但是.attr()仅对单个元素进行操作,因此仅返回该元素的值。第一个:

console.log($('.price').length)
console.log($('.price').attr('id'))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="price" id="id1" value="value1"></div>
<div class="price" id="id2" value="value2"></div>

您必须为每个单独的元素调用函数:

function callMe() {
  $('.price').each(function() {
    var id = $(this).attr("id");
    var titleInput = $(this).attr("value");

    $.ajax({
      type: 'POST',
      url: ajax_object.ajaxurl,
      dataType: 'json',
      data: {
        action: 'myaction',
        post_title: titleInput
      },
      success: function(response) {
        $('#' + id).html(response);
      }
    });
  });
}