javascript - 将内容类型更改为 JSON 时,从数据库加载更多内容不起作用

标签 javascript php jquery ajax json

一旦没有更多结果可显示,我就会尝试停止显示“加载更多”按钮。

所以,我的计划是,一旦单击“加载更多”按钮并且在数据库上运行查询,我将进行行计数,然后如果该数字小于 LIMIT 子句中请求的数字,那么我将返回该信息.

所以目前我的 js 脚本如下所示:

$(document).ready(function(){
    var pageIndex = 1;
    $('#loadmorebuilds-div').click(function() {
        $('#buildcontainer').imagesLoaded( function(){
        $.ajax({
           url: 'includes/loadmorebuilds.php?type=follow&pageIndex=' + pageIndex,
           success: function(html) {
              var el = jQuery(html);
              jQuery("#buildcontainer").append(el).masonry( 'reload' );
              $("#loadmorebuilds-div").stop();
              pageIndex++;
              $("#buildcontainer").masonry()
           }

        });

    });

});
});

这工作正常,但我想在我的 loadmorebuilds.php 页面中放置一个 JSON 返回。

所以计划是这样做:

// check if the results count is less than requested
if ($checkforlast < 8) {
    $return['noMore'] = true;
    echo json_encode($return);
}

然后我会将我的 js 更改为如下所示:

$(document).ready(function(){
    var pageIndex = 1;
    $('#loadmorebuilds-div').click(function() {
        $('#buildcontainer').imagesLoaded( function(){
        $.ajax({
           url: 'includes/loadmorebuilds.php?type=follow&pageIndex=' + pageIndex,
           success: function(html) {
              var el = jQuery(html);
              jQuery("#buildcontainer").append(el).masonry( 'reload' );
              $("#loadmorebuilds-div").stop().fadeOut();
              pageIndex++;
              $("#buildcontainer").masonry()

              if (response.correctKey === true) {
                DO SOMETHING TO REMOVE BUTTON
              }

           }

        });

    });

});
});

当我更改内容类型时,问题就出现了:

header('Content-Type: application/json');

因为这改变了我发回的数据的方式(我认为?)。更改内容类型将导致不显示新内容,并且单击“加载更多”按钮时不会发生任何情况。

如果结果少于请求且不更改内容类型,是否有另一种方法将数据发送回 ajax 调用?

希望这是有道理的!

最佳答案

我同意@palpatim 的观点,即字符串解析可能不是最好的方法。但这个解决方案也可以工作,并且不需要您在客户端上从 json 构建 html:

$(document).ready(function(){
  var pageIndex = 1;
  $('#loadmorebuilds-div').click(function() {
    $('#buildcontainer').imagesLoaded( function(){
      $.ajax({
        url: 'includes/loadmorebuilds.php?type=follow&pageIndex=' + pageIndex,
        success: function(html) {
          var el = jQuery(html),
              rowCount = el.find('tr').length;

          jQuery("#buildcontainer").append(el).masonry( 'reload' );
          $("#loadmorebuilds-div").stop().fadeOut();
          pageIndex++;
          $("#buildcontainer").masonry();

          if (rowCount < 8) {
            DO SOMETHING TO REMOVE BUTTON
          }
       }
    });
});
});

我在这里使用“tr”来表示您用来保存标记中每个结果的元素。

关于javascript - 将内容类型更改为 JSON 时,从数据库加载更多内容不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20850107/

相关文章:

PHP + HTML 表格 : Fire appropriate MySql query from each cell of the table

PHP 与 Zend Framework 无法启动 SQLite 数据库?

javascript - 使用 jQuery 干燥 html?

javascript - 无法在我的 php 中包含 .js 文件?

javascript - jQuery/javascript - 输入字段(用户、密码)就像 Twitter 的登录一样?

javascript - 是否应该为私有(private)变量使用 getter 和 setter?

javascript - 在具有不同域 url 的页面内使用 iframe 时,Internet Explorer 中的访问被拒绝

php - 我想在 Web 服务器的 mysql 数据库发生更改时发送推送通知。是否可以?

javascript - 调用函数一次,然后 setInterval

javascript - 用于选择无效输入类型的 Queryselectorall