1,使用异步思想做一个下拉列表,能够选择和展示数据库中对应的信息。

1,事件知识:所有的事件可参照:https://www.jb51.net/html5/459444.html

2,js中this补充:

在函数执行时,this 总是指向调用该函数的对象。要判断 this 的指向,其实就是判断 this 所在的函数属于谁。

this 出现的场景分为四类,简单的说就是:

有对象就指向调用对象:

var myObject = {value: 100};
myObject.getValue = function () {
console.log(this.value); // 意思是输出这个object的某个属性。 console.log(this);//我们可以查看this,事实证明this指的就是myObject 对象本身 return this.value;
};
//这个和python一样,在没有实例化的时候,用“self/this.属性"代替”对象.属性“

没调用对象就指向全局对象

var myObject = {value: 100};
myObject.getValue = function () { //为对象定义一个方法
var foo = function () { //这个方法包含一个函数,但是函数本身和对象没有任何关系,所以this无处可指,只能指向global
console.log(this.value) // => undefined
console.log(this);// 输出全局对象 global
};
foo();
return this.value;
};
//在上述代码块中,foo 函数虽然定义在 getValue 的函数体内,但实际上它既不属于 getValue 也不属于 myObject。foo 并没有被绑定在任何对象上,所以当调用时,它的 this 指针指向了全局对象 global。

用new构造就指向新对象:

js中的构造函数在我看来就是构造对象的函数,纯粹为了产生对象而产生对象,new实例化以后,实例中就指向了实例本身,但是实际上,构造函数中的this指的也是本身。

var SomeClass = function(){
this.value = 100; //这等于是说:我要构造一个函数了,大家都闪开,新函数如果使用:”实例.属性“这样的方法,this就让它指向他们本身吧,反正他们都已经继承过去了,而且我的某属性有时候只是形参,不是很方便
}
var myCreate = new SomeClass(); console.log(myCreate.value);

通过 apply 或 call 或 bind 来改变 this 的所指。(这个我不能理解,留后:https://www.jb51.net/article/65850.htm)

3,php中的$_GET变量:

预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。从带有”get“方法的表单发送到信息,对任何人都是可见的。客户的html和php要能够对起来,比如:

<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="welcome.php" method="get">
名字: <input type="text" name="fname"> //在html里设置了一个表单,格式是text,传递用户信息的时候,将会用到name属性,”fname"会成为php中$_GET变量的键。
<input type="submit" value="提交">
</form>
</body>
</html>

而php这端,直接开着$_GET接文本就行了,

你好<?php echo $_GET["fname"];?>

4,get方法中url的特殊传值问题(纠结了好几天,总算捯饬明白了)

我有前端有一个下拉列表,表里有5个单选项:012345,当我需要查询某一个但选项的详情,我需要把我选的(假设是2)传到js中,然后由js传到服务端,如何传到服务端?答案是:包在url请求中上传到服务端,怎么包?一般的约定是url后边加问号加键值对。问号在url中主要起连接作用,如果传递好几个值,那就用&符号分隔开来。

接下来到了激动人心的贴代码时刻:

首先是前端的代码:

ajax_sql.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>daqing's ajax-mysql test</title>
<script>
function showSite(str)
{
//showSite的作用在于:检查下拉列表是否有内容被选择
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return; //return语句用于中止函数的执行
} //如果在下拉列表中什么也没有得到,那就直接中止这个函数的执行,省得浪费资源,这大约是为了让代码更加健壮。 //创建xmlhttp(是XMLHttpResquest的实例)
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
} //创建在服务器响应时候执行的函数
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;//服务端的echo内容,也就是传说中的responseText
}
}
//向服务器上的文件发送请求,请注意,这个请求的参数,参数是一个键值对,q=str,这也服务端解析请求的依据;后边包含了str,也就是下拉列表中的内容
xmlhttp.open("GET","ajax_sql.php?q="+str,true);//js会请求服务器调用getsite_mysql.php,php会自己用$_GET()解析url里附带的信息:q=str
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<select name="users" onchange="showSite(this.value)"> <!--下拉列表,onchange的意思是当元素改变时候运行脚本shhowSite()-->
<option value="">请选择一个名字</option><!--首选项-->
<option value="1">daqing</option>
<option value="2">dahu</option>
<option value="3">lily</option>
<option value="4">jack</option>
<option value="5">lihua</option>
</select>
</form>
<br>
<div id="txtHint"><b>网站信息将会显示在这里</b></div>
</body>
</html>

与之配合的服务端代码:

ajax_sql.php

<?php

$q=isset($_GET["q"]) ? intval($_GET["q"]) : "";    //这个q是用来存值的键,那值呢?是下拉列表中的选项代码,比如,1号表示google,那它请求访问的是google存在数据库里的详细信息。intval()函数是把给定格式转换成整数;这个格式是个三元判断的格式
if (empty($q)){
echo "请选择一个网站";
exit;
}
$con=mysqli_connect("localhost","xxx","xxx","xxx");
if (!$con)
{
die("connect problem:".mysqli_error($con));
}
//mysqli_select_db($con,"ajax_sql");选择使用哪个数据库,但是在$con中已经定义也是可以的,如果纯粹是为了防止编码问题引起的错误,建议增加选择数据库的语句,然后后面加上设定编码方式
//mysqli_set_charset($con,"utf-8");//选择使用数据表的编码方式,省得乱码
$sql="select * from ajax_sql where id ='$q' ";
$result=mysqli_query($con,$sql);
//以下的内容是一整个的table
echo "<table border='1'>
<br>
<br>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
</tr>";
//以上是先输出表头,tr表示竖着排列,th表示表头:table head,tr表示表的行(table row),td表示表格单元
while ($row=mysqli_fetch_array($result))
{
echo "<tr>"; //一行开始
echo "<td>".$row['id']."</td>"; //行里有各种单元
echo "<td>".$row['name']."</td>";
echo "<td>".$row['age'] ."</td>";
echo "<td>".$row['sex']."</td>";
echo "</tr>"; //一行结束,由此可见,我们的php输出的引号里的内容也是遵循html的标记符的
}
echo "</table>";
mysqli_close($con); ?>

5,网页请求和request请求问题

我们知道,用户使用浏览器发送访问请求,然后服务端的php(仅说php哈)返回请求的的数据,可是你有没有想过,php是如何知道返回什么东西给用户的?我做了个实验,是这样的,服务端放了php文件:<?php echo "<p>hello php</p>"; ?>,接下来我不通过浏览器访问,我用pythonrequests包,发送访问请求requests.get(url),然后用.text解析返回的内容,我收到了这样的消息:<p>hello php</p>,原来我们收到的是php中echo的东西!那么我们是否可以收到其他html表单元素呢?自己做试验吧。

javascript/ajax和php 进阶 之 项目实战的更多相关文章

  1. Java自学基础、进阶、项目实战网站推荐

    推荐一个自学的好平台,有Java基础,前端,后端,基础的内容都有讲解,还有框架的讲解和实战项目,特别适合自学 JAVA 自学网站 JAVA 练习题 Spring 教程 Mybatis 教程 Sprin ...

  2. mxgraph进阶(三)Web绘图——mxGraph项目实战(精华篇)

    Web绘图--mxGraph项目实战(精华篇) 声明     本文部分内容所属论文现已发表,请慎重对待. 需求 由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式 ...

  3. AngularJS进阶(三十九)基于项目实战解析ng启动加载过程

    基于项目实战解析ng启动加载过程 前言 在AngularJS项目开发过程中,自己将遇到的问题进行了整理.回过头来总结一下angular的启动过程. 下面以实际项目为例进行简要讲解. 1.载入ng库 2 ...

  4. javascript项目实战之原生js模拟淘宝购物车

    通过JavaScript实现类似与淘宝的购物车效果,包括商品的单选.全选.删除.修改数量.价格计算.数目计算.预览等功能的实现.实现的效果图: 相应的代码: shoppingCart.html < ...

  5. 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01

    书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...

  6. 项目实战12.2—企业级监控工具应用实战-zabbix操作进阶

    无监控,不运维.好了,废话不多说,下面都是干货. 流量党勿入,图片太多!!! 项目实战系列,总架构图 http://www.cnblogs.com/along21/p/8000812.html 一.U ...

  7. angularJs项目实战!01:模块划分和目录组织

    近日来我有幸主导了一个典型的web app开发.该项目从产品层次来说是个典型的CRUD应用,故而我毫不犹豫地采用了grunt + boilerplate + angularjs + bootstrap ...

  8. 浅谈 Angular 项目实战

    为什么使用 Angular 我不是 Angular 的布道者,但如今痴迷 Angular,使用 Angular 做项目让我有一种兴奋感.目前的三大主流前端框架都研究过,博客中也有三者的相关教程,最早接 ...

  9. python操作三大主流数据库(14)python操作redis之新闻项目实战②新闻数据的展示及修改、删除操作

    python操作三大主流数据库(14)python操作redis之新闻项目实战②新闻数据的展示及修改.删除操作 项目目录: ├── flask_redis_news.py ├── forms.py ├ ...

随机推荐

  1. ActiveMQ与RabbitMQ的区别

    1. ActiveMQ/ApolloMQ 优点:老牌的消息队列,使用Java语言编写.对JMS支持最好,采用多线程并发,资源消耗比较大.如果你的主语言是Java,可以重点考虑. 缺点:由于历史悠久,历 ...

  2. lucene创建索引的几种方式(一)

    什么是索引: 根据你输入的值去找,这个值就是索引 第一种创建索引的方式: 根据文件来生成索引,如后缀为.txt等的文件 步骤: 第一步:FSDirectory.open(Paths.get(url)) ...

  3. python自动化开发-[第十一天]-Mysql

    今日概要: 1.初识mysql 2.MySQL的增删改查 3.主键.外键 4.组合和分组 一.数据库的由来 1.什么是数据库? 数据的仓库,在ATM,购物车中存储数据为目录,称为数据库 1.数据以表格 ...

  4. CodeChef - BLACKCOM 可行性dp转最优化树dp

    https://www.codechef.com/problems/BLACKCOM 题意:一颗5000个黑白结点的树,10W个查询寻找是否存在大小s并且有t和黑节点的子图 一开始就觉得应当是一个树d ...

  5. 解决openoffice进程异常退出的办法

    步骤1 编写脚本 openoffice.sh #!/usr/bin/bash OPENOFFICEPID=`ps -ef|grep "/opt/openoffice4/program/sof ...

  6. MAC操作系统使用小技巧

    MAC操作系统使用小技巧   作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.修改主机名名称 1>.修改主机名称 修改和查询的Ulinx命令如下: sudo scutil ...

  7. Java Web服务收到请求时线程的情况

    Web请求线程的状态 在开发中,突然想到了这样的一个问题, Java对每一次Web的请求,是否都会创建一条线程去进行处理呢?也就是说,当一个Class的方法同时有1000个请求访问时,线程是如何运作的 ...

  8. 翻译二--创建一个Web测试计划

    这里主要是翻译jmeter官方文档第4章:创建一个基本的测试计划来测试一个网站.你将创建5个用户来发送请求给两个页面,同时,你将告诉用户去执行两次测试.所以,请求的总和是5(users)*2(requ ...

  9. SqlServer中的事务使用

    一.事务的概念和特点 事务(transaction)是恢复和并发控制的基本单位. 事务的特点 原子性:事务是一个工作单元,要都成功,要么的失败 例子:A付款给B,A余额-100,B余额+100,只能都 ...

  10. springcloud 服务调用的两种方式

    spring-cloud调用服务有两种方式,一种是Ribbon+RestTemplate, 另外一种是Feign.Ribbon是一个基于HTTP和TCP客户端的负载均衡器,其实feign也使用了rib ...