Есть ли способ изменить JavaScript переменную на PHP? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть вызов AJAX, который помогает пользователю отфильтровать данные на входе [user]:

function filter_data() {

    var action = 'fetch_data';

    //Pagination
    var nextPage = 0; //InfiniteScroll.js will add 1 to this

    //Filters
    var minimum_wt = $('#hidden_minimum_wt').val();
    var maximum_wt = $('#hidden_maximum_wt').val();
    var shape = get_filter('shape');
    var color = get_filter('color');
    var enhancement = get_filter('enhancement');
    var matching = get_filter('matching');

    $.ajax( {

        url: 'vendors/php/Filters/FilterData.php',
        method: 'POST',
        data: {
            action: action, 
            pageno: nextPage,
            minimum_wt: minimum_wt, 
            maximum_wt: maximum_wt, 
            shape: shape, 
            color: color, 
            enhancement: enhancement, 
            matching: matching
        },
        async: true,
        cache: false,
        error: 

            function(jqXHR, strError) {

                if(strError == 'timeout') {

                    // Do something. Try again perhaps?
                    alert('Seems like there was an error loading the filters request.');

                }

            },

        success:

            function(data) {

                $('#StoneContainer').html(data);
                $('#pageno').val(nextPage); 
                $('.LoaderContainer').show();   //Show infinite scroll  

            },

        timeout: 3000

    });

}

Обратите внимание, var nextPage = 0 это моя нумерация страниц (номер страницы равен 0 в огне затем другой AJAX вызов добавит 1 к нему, когда изображение inView).

Я полагаю, что PHP для указанного выше вызова AJAX - это то, где моя существенная проблема. Мое условие PHP else не показывает [на практике], как это должно быть на странице 1 (но вызов AJAX изменяет номер страницы на 0 в огне (поскольку изображение inView равно .hide if(data == ''))). Я думал, что решение будет состоять в том, чтобы просто изменить $pageno переменную (переменную, которая объявляет $_POST ed номер страницы) на 1 в другом условии PHP, но $pageno, похоже, не изменится Неважно что я делаю. Можно ли изменить переменную PHP в другом условии или есть лучшее решение для этого?

Вот приведенные выше AJAX вызовы PHP:

 <?php

    if(isset($_POST['pageno']) || isset($_POST['action'])) {

        //Include database configuration file
        include('../dbConfig.php'); 

        $limit = 10;    
        $pageno = $_POST['pageno'];
        $offset = !empty($pageno) ? $pageno: 1;

        $SQL = "

            SELECT
                number,
                image1,
                wt,
                TRUNCATE(length,1) as length,
                TRUNCATE(width,1) as width,
                CASE
                    WHEN stonetype = 'SA' THEN 'Sapphire'
                    WHEN stonetype = 'RU' THEN 'Ruby'
                    WHEN stonetype = 'TML-P' THEN 'Paraiba'
                    WHEN stonetype = 'EM' THEN 'Emerald'
                    WHEN stonetype = 'TS' THEN 'Tsavorite'
                    WHEN stonetype = 'SI' THEN 'Spinel'
                    WHEN stonetype = 'GT' THEN 'Garnet'
                    WHEN stonetype = 'BER' THEN 'Beryl'
                    WHEN stonetype = 'TML' THEN 'Tourmaline'
                    WHEN stonetype = 'KO' THEN 'Kornerupine'
                    ELSE 'n/a'
                END AS 'stonetype',
                CASE                                    
                    WHEN enhcode = 'H' THEN 'Heated'
                    WHEN enhcode = 'N' THEN 'Unheated'
                    ELSE 'n/a'
                END AS 'enhcode'
            FROM 
                stones
            WHERE 
                wt >= 2.5

        ";

        if($pageno >= 1) {

            if(isset($_POST["minimum_wt"], $_POST["maximum_wt"]) && !empty($_POST["minimum_wt"]) && !empty($_POST["maximum_wt"])) {

                $SQL .= "

                    AND wt BETWEEN '".$_POST["minimum_wt"]."' AND '".$_POST["maximum_wt"]."'

                ";

            }

            if(isset($_POST["shape"])) {

                $shape_filter = implode("','", $_POST["shape"]);

                $SQL .= "

                    AND stoneshape IN('".$shape_filter."') 

                ";
            }

            if(isset($_POST["color"])) {

                $color_filter = implode("','", $_POST["color"]);

                $SQL .= "

                    AND stonecolor IN('".$color_filter."')

                ";

            }

            if(isset($_POST["enhancement"])) {

                $enhancement_filter = implode("','", $_POST["enhancement"]);

                $SQL .= "

                    AND enhcode IN('".$enhancement_filter."')

                ";

            }

            if(isset($_POST["matching"])) {

                $matching_filter = implode("','", $_POST["matching"]);

                $SQL .= "

                    AND pair IN('".$matching_filter."')

                ";  

            }

            $SQL .= "

                ORDER BY wt ASC
                LIMIT 
                    $offset,
                    $limit

            ";

            $result = mysqli_query($db, $SQL);

            $output = '';

            if(isset($_POST["minimum_wt"], $_POST["maximum_wt"]) && !empty($_POST["minimum_wt"]) && !empty($_POST["maximum_wt"]) && isset($_POST["shape"]) && isset($_POST["color"]) && isset($_POST["enhancement"]) && isset($_POST["matching"]) && $row = mysqli_fetch_array($result)) {

                foreach($result as $row) {

                    $output .=  '

                        <div class="Stone">
                            <!-- landing page -->
                            <a href="#ItemPage" class="ItemLink" rel="modal:open" id="' . $row['number']. '">

                                <!-- image -->
                                <div class="StoneData StoneIMG">
                                    '.(($row["image1"] > 0) ? '<img src="../../../' . $row['image1'] . '">' : '<div class="NoIMG NoIMGtext">Image Unavailable</div>').'
                                </div>

                                <!-- weight --> 
                                <div class="StoneData">' . $row['wt'] . 'Ct</div>

                                <!-- type -->
                                <div class="StoneData">' . $row['stonetype'] . '</div>

                                <!-- enhancement -->
                                <div class="StoneData">' . $row['enhcode'] . '</div>

                                <!-- dimensions -->
                                <div class="StoneData">' . $row['length'] . ' x ' . $row['width'] . '</div>

                                <!-- item number -->
                                <div class="StoneData"># ' . $row['number'] . '</div>

                            </a>

                        </div>

                    ';

                }

            } else {

                $output = '

                    <h1 class="Error">
                        <span class="mdi mdi-filter-remove mdi-48px"></span> 
                        NO STONES MATCH THAT
                    </h1>

                ';

            }

            echo $output;

        }

    }

?>

Я надеюсь, что это имело смысл. Большое спасибо за ваше время заранее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...