";显示更多“;按钮


"show more" button with Ajax

我正在尝试用ajax做"显示更多"按钮,以在每次点击时显示新结果

<input type="hidden" id="direction" value="{$page+1}" />
<script type="text/javascript">
$(document).ready(function(){
 $('#show_more').click(function(){  
    $('#results_ajax').fadeIn("slow").delay(1000);
    var ajax_url = "../profile/results_ajax/";
    var direction = parseInt( $('#direction').val() );
      $.ajax({
        url: ajax_url + direction,
        type : "POST",
        dataType :"html",
        success : function(msg){
            $('#direction').val(direction + 1);
             $('#results_ajax').append(msg)
        }        
      });
    });
    });
</script>
<div style="float: right;width:72%;margin-right:20px;">
<table width="100%" style="border-bottom:0px;">
<tr class="tbl">
<td colspan="4">{$ci->lang->line('results_archive')}</td>
</tr><tr>
<td class="tbl1" style="width: 50%;">{$ci->lang->line('exam_title')}</td>
<td class="tbl2" style="width: 15%;">{$ci->lang->line('score')}</td>
<td class="tbl1" style="width: 15%;">{$ci->lang->line('percentage')}</td>
<td class="tbl2" style="width: 20%;">{$ci->lang->line('date')}</td>
{foreach $results as $result}
<tr>
<td class="tbl1" style="width: 50%;">{$result.id}.{$result.exam_title}</td>
<td class="tbl2" style="width: 15%;">{$result.score} / {$result.full_mark}</td>
<td class="tbl1" style="width: 15%;">{$result.percentage}%</td>
<td class="tbl2" style="width: 20%;">{date('d-m-Y',{$result.date})}</td>
</tr>
{/foreach}
</table>
<div id="results_ajax" style="display:none;"></div>
<button id="show_more">Show More</button>
</div>

所以这是我的代码,但我有一个小问题,我想每次点击都做一些加载效果,但(fadeIn)效果只出现在第一次,之后新结果出现,没有任何效果,表直接出现!

您的"显示更多"按钮类型看起来像是提交表单的类型(它会发布表单,然后加载新页面)。我建议将其更改为常规按钮或取消默认操作,这样您就不会提交表单。

如果这仍然没有显示出您的问题,那么在ajax调用中添加一个错误处理程序,并找出它是否返回了错误,如果返回了,那么错误是什么


此外,这里的.delay(1000)没有做任何事情:

$('#results_ajax').fadeIn("slow").delay(1000);

如果您想将ajax调用延迟一秒钟,则需要使用setTimeout()


将所有这些建议组合到您的代码中:

HTML:

<button id="show_more">Show More</button>

代码:

$('#show_more').click(function(e){  
      e.preventDefault();
      $('#results_ajax').fadeIn("slow");
      setTimeout(function() {
          $.ajax({
            url: "../results_ajax/2",
            type: "POST",
            dataType:"html",
            success: function(msg){
                $('#results_ajax').html(msg)
            },
            error: function(xhr, status, error) {
                console.log(status);
                console.log(error);
            }
          });
      }, 1000);
    });
});

首先,将submit按钮更改为按钮,它不会提交任何您无法控制的内容。其次,除非你知道有结果要显示(例如Ajax成功),否则你不应该显示resultsdiv,所以把你的fadeIn放在success函数中,你可以取消延迟。这只会在Ajax成功时触发。

我建议添加一个错误处理程序,即使您只是将结果记录到控制台以供参考(或在测试时)。在这种情况下,您的AJAX请求可能会失败,并且您没有处理该错误,因此您不知道发生了什么:

<button type="button" id="show_more">Show More</button>
$('#show_more').click(function(e){  
    e.preventdefault();
    $.ajax({
         url: "../results_ajax/2",
         type : "POST",
         dataType :"html",
         success : function(msg){
             $('#results_ajax').html(msg).fadeIn("slow");
         },
         error: function(msg){ console.log(msg); }
    });
});

更新

你的AJAX URL有问题,我建议你只在隐藏输入中存储页码,而不是整个URL。然后你可以用你的成功函数来增加它:

<input type="text" id="direction" value="{$page}">

AJAX调用获取direction(页码),将其连接到URL上,然后在成功时将字段值增加一。

var ajax_url = "../profile/results_ajax/";
var direction = parseInt( $('#direction').val() );
$.ajax({
    url: ajax_url + direction,
    ...
    success: function(msg) {
        $('#direction').val(direction + 1);
        ...