【发布时间】:2013-12-31 01:03:49
【问题描述】:
一旦没有更多结果可显示,我正在尝试停止显示“加载更多”按钮。
所以,我的计划是,一旦单击加载更多按钮并在数据库上运行查询,我将进行行计数,然后如果该数字小于 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 调用?
希望这是有道理的!
【问题讨论】:
-
在运行时做出内容类型决定似乎是一种过于复杂的方法。为什么不直接返回字符串 'noMore' 并在追加之前在成功回调中测试该值?
-
因为你在字符串解析和替换中权衡了内容类型声明——他们必须在显示之前从 HTML 中去除“noMore”。返回数据是正确的方法。
-
为什么不尝试添加 dataType: "json", 到 ajax 请求?
-
@Neil 感谢您的回复,也许是因为它迟到了,但是您是否有机会详细说明我将如何处理?就像我在 php 页面中发送什么,然后我如何在成功回调中检查它?
标签: javascript php jquery ajax json