微信小程序搜索功能(附:小程序前端+PHP后端)


Posted in Javascript onFebruary 28, 2019

开发需求

微信小程序已经是非常火了,而且学习也比较容易,但是对于初学者来说还是一件比较伤脑筋的事,接下来给大家分享一下小程序搜索的思路。

流程

1、表单(输入框、提交按钮、提交的name值)
2、接收表单数据(js获取表单name=keyword的值)
3、通过wx.request向服务器后端发起请求查询数据库
4、返回JSON格式的数据给小程序,js解析渲染到小程序前端展示

界面

微信小程序搜索功能(附:小程序前端+PHP后端)

代码

index.wxml

<!-- 标题 -->
<view class="title">小程序搜索</view>

<!-- 搜索框view -->
<view class="search_con">

<!-- 表单 -->
 <form bindsubmit="formSubmit">
 <!-- 记得设置name值,这样JS才能接收name=keyword的值 -->
  <input type="text" name="keyword" class="search_input" placeholder='你要找什么呢?'/>
  <button formType="submit" class="search_btn">搜索</button>  
 </form>
</view>

<!-- 搜索结果展示 -->
<view wx:for="{{re}}" wx:key="re" class="search_result">
<!-- 当提交空白表单的时候 -->
 <view class="empty">{{item.empty}}</view>
 <!-- 当有搜索结果的时候 -->
 <view class="resname">{{item.resname}}</view>
 <!-- 当查询不到结果的时候 -->
 <view class="noresult">{{item.noresult}}</view>
</view>

index.js

其中里面的

http://localhost/search.php?keyword=

是服务器后端接口,用于接收小程序传过去的关键词的,下面会有这个后端PHP文件。

const app = getApp()
Page({
 data: {},

 //执行点击事件
 formSubmit: function (e) {

  //声明当天执行的
  var that = this;

  //获取表单所有name=keyword的值
  var formData = e.detail.value.keyword;

  //显示搜索中的提示
  wx.showLoading({
   title: '搜索中',
   icon: 'loading'
  })

  //向搜索后端服务器发起请求
  wx.request({

   //URL
   url: 'http://localhost/search.php?keyword=' + formData,

   //发送的数据
   data: formData,

   //请求的数据时JSON格式
   header: {
    'Content-Type':'application/json'
   },

   //请求成功
   success: function (res) {

    //控制台打印(开发调试用)
    console.log(res.data)

    //把所有结果存进一个名为re的数组
    that.setData({
     re: res.data,
    })

    //搜索成功后,隐藏搜索中的提示
    wx.hideLoading();
   }
  })
 },
})

index.wxss

/* 搜索样式 */
.title{
 text-align: center;
 font-size: 20px;
 font-weight: bold;
}


.search_con{
 width: 80%;
 margin:20px auto;
}

.search_con .search_input{
 border: 1px solid rgb(214, 211, 211);
 height: 45px;
 border-radius: 100px;
 font-size: 17px;
 padding-left: 15px;/*此处要用padding-left才可以把光标往右移动15像素,不可以用text-indent*/
 color: #333;
}

.search_con .search_btn{
 margin-top: 15px;
 width: 100%;
 height: 45px;
 background: #56b273;
 color: #fff;
 border-radius: 100px;
}

.search_result{
 width: 80%;
 margin:10px auto;
}


.search_result .empty{
 text-align: center;
 color: #f00;
 font-size: 15px;
}

.search_result .noresult{
 text-align: center;
 color: #666;
 font-size: 15px;
}

.search_result .resname{
 text-align: left;
 color: #333;
 font-size: 15px;
}

服务端

search.php

<?php
header('Content-Type:application/json');

//获取表单数据
$keyword1 = $_GET["keyword"];

//过滤表单空格
$keyword2 = trim($keyword1);

//当表单提交空白数据时
if(empty($keyword2)){
  
  //构建数组
  $arr = array(
      "empty" => "表单不能为空"
    );

  //把数组转换为json
  $data = json_encode($arr);
  echo "[$data]";

}else{

//过滤表单特殊字符
$replace = array('!','@','#','$','%','^','&','*','(',')','_','-','+','=','{','}','[',']',';',':','"','<','>','?','/','|');
$keyword3 = str_replace($replace, '', $keyword2);

// 连接数据库
$con = mysql_connect("数据库地址","数据库账号","数据库密码");
if (!$con){die('Could not connect: ' . mysql_error());}

mysql_select_db("数据库名", $con);
mysql_query("SET NAMES UTF8");

//查询数据库
$result = mysql_query("SELECT * FROM 表名 WHERE 需要查询的字段 like '%$keyword3%' ORDER BY ID DESC");
$results = array();
//查询数据库是否存在这条记录
$exist = mysql_num_rows($result);
if ($exist) {
  //遍历输出
  while ($row = mysql_fetch_assoc($result)){
    $results[] = $row;
    }

  //输出JSON
  echo json_encode($results);

  //当查询无结果的时候
  }else{

    //构建数组
    $arr = array(
      "noresult" => "暂无结果"
    );

    //把数组转换为json
    $data = json_encode($arr);
    echo "[$data]";
}

//断开数据库连接
mysql_close($con);
}
?>

服务端也是非常简单的,大家自己把服务端写好一点,毕竟安全和效率是很重要的。

演示

微信小程序搜索功能(附:小程序前端+PHP后端)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Ext grid 添加右击菜单
Nov 26 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
Dec 16 Javascript
MUI 上拉刷新/下拉加载功能实例代码
Apr 13 Javascript
AngularJS的ng-click传参的方法
Jun 19 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
Aug 14 Javascript
Webstorm2016使用技巧(SVN插件使用)
Oct 29 Javascript
Js通过AES加密后PHP用Openssl解密的方法
Jul 12 Javascript
layui table单元格事件修改值的方法
Sep 24 Javascript
JavaScript中的this/call/apply/bind的使用及区别
Mar 06 Javascript
vue项目中使用bpmn-自定义platter的示例代码
May 11 Javascript
解决iView Table组件宽度只变大不变小的问题
Nov 13 Javascript
vue-router定义元信息meta操作
Dec 07 Vue.js
详解写好JS条件语句的5条守则
Feb 28 #Javascript
JS判断两个数组或对象是否相同的方法示例
Feb 28 #Javascript
jQuery.parseJSON()函数详解
Feb 28 #jQuery
js获取form表单中name属性的值
Feb 27 #Javascript
用VueJS写一个Chrome浏览器插件的实现方法
Feb 27 #Javascript
jQuery each和js forEach用法比较
Feb 27 #jQuery
JavaScript遍历数组的三种方法map、forEach与filter实例详解
Feb 27 #Javascript
You might like
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
33种Javascript 表格排序控件收集
2009/12/03 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
python实现爬虫下载美女图片
2015/07/14 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
产品发布会策划方案
2014/05/12 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
2014年司法局工作总结
2014/12/11 职场文书
三年级学生评语大全
2014/12/26 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
创业计划书详解
2019/07/19 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python