使用php和ajax按给定数量增加查询限制
重新磨损的问题如何处理新信息使用php和ajax按给定数量增加查询限制,php,jquery,ajax,Php,Jquery,Ajax,重新磨损的问题如何处理新信息 我试图在搜索中显示一组有限的结果(即在查询中限制为10),然后有一个按钮将加载下一个10(现在在同一查询中限制为20) 问题是,当我按下按钮时,它不仅刷新指定的div,而且在页面顶部重新运行doSearch,从而将限制重置为10 所以如果我 1.加载结果页面 2.将页面顶部的doSearch注释掉 然后首先… 3.点击按钮 它的工作原理就像一本书。。。现在显示20个结果。。。如果我再次点击它会显示30。。。等等 如果我取消对页面顶部的doSearch的注释并单击按钮
我试图在搜索中显示一组有限的结果(即在查询中限制为10),然后有一个按钮将加载下一个10(现在在同一查询中限制为20) 问题是,当我按下按钮时,它不仅刷新指定的div,而且在页面顶部重新运行doSearch,从而将限制重置为10 所以如果我
1.加载结果页面
2.将页面顶部的doSearch注释掉
然后首先…
3.点击按钮 它的工作原理就像一本书。。。现在显示20个结果。。。如果我再次点击它会显示30。。。等等 如果我取消对页面顶部的doSearch的注释并单击按钮。。。现在它再次显示10个结果 ajax代码中有问题的代码是
var showResult = self.closest('#showResultsAll').find('[id^="showResults"]');
showResult.load(location.href + " #showResults>*", "");
我不明白为什么我的代码会重新运行页面顶部的doSearch。。。但希望你们中的一些聪明人能看到我的错误,让我走上正确的道路
我的基本设置:显示结果的页面:
<?php // get search results limit 10 ?>
.
.
.
<div id="showResultsAll">
.
.
.
<div id="showResults">
// Loop through and show results
<div id="moreResultsButton">
<input type="hidden" name="search" id="search" value="<?php // search terms ?>">
<button id="moreResults" value="<?php // number of results found ?>">
moresults.php
session_start ();
require ( "../scripts/functions.php" );
// Set variable
$search = $_POST['search'];
$limit = $_POST['countNew'];
doSearch ( $pdo , $search , $limit ); // same function that found the search results in the first place
更新因此,我在下面给出的答案的基础上找到了一个解决方案(尽管我仍然很好奇为什么我的原始代码坚持在页面顶部重新运行doSearch) 解决方案:
我首先在doSearch中删除限制,让它查找所有结果,然后在页面的ShowResults部分进行“限制”,然后在jQuery中添加10 新代码:
页面显示结果
<?php // doSearch no limit ?>
.
.
.
<div id="showResultsAll">
.
.
.
<div id="showResults">
// Loop through and show results - limiting like this
// if isset $_POST['show'] (ie. button clicked)
// if $_POST['show'] less than $_SESSION['totalResults'] (ie. more results coming)
// $show = $_POST['show'] (ie. 20, 30, etc.)
// else
// $show = $_SESSION['totalResults'] (ie. 11, 12, ..., 21, 22, ..., 31, 32, ..., etc.)
// else (if button not clicked limit results to max. 10)
// if $_SESSION['totalResults'] more than 10
// $show = 10
// else
// $show = $_SESSION['totalResults'] (ie. 1, 2, 3, etc.)
// loop trough $show number of results
<div class="<?php if $show == $_SESSION['totalResults'] echo "disabled" // Only active if more results are available ?>" id="moreResultsButton">
<button id="moreResults" value="<?php echo $show; ?>">
好的,这不是最好的答案,只是上面评论的一个发展。明天我会试着写一个更好的答案 然而,目前,我的快速解决办法是:
doSearch
,并将所有初始数字设置为0$(文档).ready(函数(){
“严格使用”;
$(“按钮#更多结果”)。单击(添加结果);
函数addResults(){
var self=$(这是);
var closestDiv=self.closest(“#moresultsbutton”);
var search=closestDiv.find('[id^=“search”]').val();
var count=self.val();
var countNew=+count+10;
$.ajax({
类型:“POST”,
url:“../scripts/moresults.php”,
数据:“countNew=“+countNew+”&search=“+search,
成功:函数(){
var showResult=self.closest('#showResultsAll').find('[id^=“showResults”]');
showResult.load(location.href+“#showResults>*”,“”);
}
});
}
//加载前十个结果
addResults();
});代码>doSearch函数在哪里?在functions.php(即页面顶部调用的require(../scripts/functions.php))ps中显示您的代码doserach。doSearch发现结果很好。。。否则它将首先找不到10个fist结果…在单击之外声明countNew
。。因为每次单击按钮时,它都会刷新值。@shadowfeind没有帮助,如果我将一个带有countNew值的警报置于success下,ir将显示一个带有数字20的警报。。。所以countNew传递给moreresults.php,作为新的限制是20,do搜索查找20个结果。。。问题是没有什么新东西出现…非常感谢你。。。我真的很感激你花时间。。。它“工作”就像“显示更多”按钮现在做它应该做的那样。。。所以我会投赞成票,但为了明天更好的答案暂时保留复选标记。。。两周前,我不知道jQuery是从盒子里的杰克那里来的。。。我唯一能学到的就是被证明是错的。。。我不想做对-我想做得更好。。。。就像我说的-非常感谢…好的。。。说话有点太早了。。。它第一次起作用。。。所以我搜索,它显示了前10个结果。。。然后我点击按钮,它显示20个结果。。。然后我再次点击按钮,什么也没发生。。。我刷新了整个页面,它显示了20个结果。。。我点击按钮,它现在显示30个结果。。。我点击按钮,什么也没发生。。。然后就开始了…+如果我现在点击另一个页面并返回搜索页面,则不会显示任何内容,按钮也不会执行任何操作。。。现在,即使刷新整个页面也不再有效。。。现在唯一有效的方法是再次搜索或+刷新…加上var self=$(this);-这一行现在在代码中显示为严格违反……我在答案中添加了一个巨大的扩展。我希望有帮助。否则,您可能想通过Skype与我联系,以便我们可以一起编写实际代码。非常感谢您。。。现在打开包装实在是太多了呵呵,但我会仔细看看。。。试试你的建议。。。如果我能让它工作,我会给你打勾,回答:)。。。
<?php // doSearch no limit ?>
.
.
.
<div id="showResultsAll">
.
.
.
<div id="showResults">
// Loop through and show results - limiting like this
// if isset $_POST['show'] (ie. button clicked)
// if $_POST['show'] less than $_SESSION['totalResults'] (ie. more results coming)
// $show = $_POST['show'] (ie. 20, 30, etc.)
// else
// $show = $_SESSION['totalResults'] (ie. 11, 12, ..., 21, 22, ..., 31, 32, ..., etc.)
// else (if button not clicked limit results to max. 10)
// if $_SESSION['totalResults'] more than 10
// $show = 10
// else
// $show = $_SESSION['totalResults'] (ie. 1, 2, 3, etc.)
// loop trough $show number of results
<div class="<?php if $show == $_SESSION['totalResults'] echo "disabled" // Only active if more results are available ?>" id="moreResultsButton">
<button id="moreResults" value="<?php echo $show; ?>">
$(document).ready(function(){
"use strict";
$(document).on('click','button[id^="moreResults"]', function(){
var self = $(this);
var show = self.val();
var showNew = + show + 10;
$.ajax({
type: "POST",
url:'',
data:"show="+showNew,
success:function(){
self.closest('#showResultsAll').find('[id^="showResults"]').load(location.href + " #showResults>*", "");
}
});
});
});