Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php和ajax按给定数量增加查询限制_Php_Jquery_Ajax - Fatal编程技术网

使用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
  • 将jQuery替换为以下内容:
  • $(文档).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>*", "");
                }
            });
        });
    });