使用Ajax取得查询与筛选结果

        data: {            "key": $("#SearchKeyInput").val(),            "Category": $("#SearchOptionCategory option:selected").val(),            "Min": $("#SearchKeyInputMinPrice").val(),            "Max": $("#SearchKeyInputMaxPrice").val(),            "BreakFast": $('#CheckboxForBreakFast:checked').val(),            "Lunch": $('#CheckboxForLunch:checked').val(),            "Dinner": $('#CheckboxForDinner:checked').val()

在Ajax传递参数进去后端时,建立一个Data,里面的key与Value分别为上面七样从前端节点选取的值,而Key则是我们自己设定的,在后端拿取参数时,就必须拿取前方的Key,而型别也要打对。

再来我们会设置前端的分页:

            var itemPerPage = 8;            var HowManyPages = (data.length / itemPerPage);//40/8 =5页;

先设定每页以8个item为一个单位,
计算 如果我的data回传长度有40,那除以8个品项,
我总共的页面会是5页。

不过如果总品项大于40呢?

            var showItems = 0;            if (data.length < itemPerPage)            {                showItems = data.length;            }            else            {                showItems = (data.length / HowManyPages);            }

这里先宣告一个 showItems变数为容器,
如果 所有品项 小于 我每页所设定的item(8),
秀出的所有品项就只会有我的 最大长度(比如 7项)。

而不是呢?
就会依照刚刚设定的数字去做处理,一页要秀的数量(8) = 总品项(40) / 总共有几页(5页);

pdtItem = data;

这是我们所要拿到的物件,在function外面,我们也必须宣告一个

var pdtItem= null;

为容器。 以这样处理,我们之后输出的所有字串pdtItem,在编译的时候就会都是物件。

再来宣告一个Label容器装我们的节点字串。

var label = `<section class='featured spad'><p>搜寻结果:共有 ${data.length} 笔商品</p><div class='container'><div>`;            label += "<div class='row featured__filter' id='pagesForForLoop'>";

上面为我们一开始设定的节点框架,以及物件总长(总商品数目)。

再来我们进行迴圈,把从0到最后的物件都取出来。

for (let i = 0; i < showItems; i++) {                label += `                          <div class="col-lg-3 col-md-4 col-sm-6 mix oranges fresh-meat">                          <div class="featured__item">                          <div class="featured__item__pic set-bg" style="background-image: url(${data[i].tProduct.cPicture.replace("~", "")})">                          <ul class="featured__item__pic__hover">                          <li><a href="javascript: void(0)" onclick="addCart(pdtItem[${i}].tProduct)"><i class="fa fa-shopping-cart"></i></a></li>                          </ul>                          <ul class="start_for_homepage">`

上面会取出 tProduct物件中的 Picture,再用replace将~ 给空字串化,
创立一个 onclick事件,href:javascript: void(0),则是让点击后的画面不要乱跑。
onclick事件的参数,我们设定 取出物件[index]的tProduct物件,
所以传进addCart function的参数就会是一个tProduct型别的物件,里面会有所有tProduct物件所拥有的任何属性。

再来是一个商品的评分, 平均分数 如果 <= 0 就会是 0, 如果不是 就会是 int转化(总和/总数)。

let Average_message_adri = data[i].count <= 0 ? 0 : parseInt(data[i].sum / data[i].count)

第一个for迴圈是平均分数有几个,我们就画几颗橘色的星星span上去,第二个for迴圈是 5颗星-平均分数 ,若平均分数为3,可以取得2颗灰色的星星。

                for (let x = 0; x < Average_message_adri; x++) {                    label += `<li><span class="fa fa-star checked" style="color: orange;font-size:25px""></span></li>`                }                for (let g = 0; g < 5 - Average_message_adri; g++) {                    label += `<li><span class="fa fa-star checked" style="color: #d5d3cf;font-size:25px""></span></li>`                }                label += ` </ul>

再来放上製作时间的分钟数

<span class="product_time_yu">製作时间:${data[i].tProduct.cFinishedTime}分钟</span> `

下面则显示 我们要导向的商品页面超连结、商品价格以及商品的库存量

                label+=`</div>                        <div class="featured__item__text">                        <h6><a href="/ProductDetail/ProductData?id=${data[i].tProduct.cProductId}">${data[i].tProduct.cProductName}</a></h6>                        <h5>$${data[i].tProduct.cPrice}</h5>                        <h6>库存量 ${data[i].tProduct.cQuantity} </h6>                        </div>                        </div>                        </div>`;            }

顺便挂上 for迴圈的结束括号

所有商品的结束标籤

            label += "</ div>";            label += "</ div>";            label += "</div>";            label += `<nav aria-label="Page navigation example">            <ul class="pagination ">`;

再来是我们的分页连结

            for (var i = 0; i < HowManyPages; i++)            {                label += `<li class="page-item">                <button type="button" class="page-link" onclick="pagesForSearch(${i})">${i + 1}</button>                </li>`;            }

结束区域的标籤,把divforSearch节点下的东西全部替换成我们写好的label字串,
再挂上 ajax success的结束括号。

            label += `</ul>                      </nav>`;            label += "</ section>";            $("#divforSearch").html(label);        }

这样就完成了我们前端的传送参数,接收物件,节点展示,下一篇会讲解后端是怎么把传进的参数,处理成可以用的data物件。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章