★JSON.parse()
将 JSON 字符串直接传递给 JSON.parse()就可以得到相应的 JavaScript 值。
console.log(JSON.parse(http.response));
☆
keydown:当用户按下键盘上的任意键时触发,而且如果按住不放的话,会重复触发此事件。
keypress:当用户按下键盘上的字符键时触发,而且如果按住不放的话,会重复触发此事件。按下 Esc 键也会触发这个事件。Safari 3.1 之前的版本也会在用户按下非字符键时触发 keypress事件。
keyup:当用户释放键盘上的键时触发。
虽然所有元素都支持以上 3 个事件,但只有在用户通过文本框输入文本时才最常用到。
只有一个文本事件:textInput。这个事件是对 keypress 的补充,用意是在将文本显示给用户之前更容易拦截文本。在文本插入文本框之前会触发 textInput 事件。在用户按了一下键盘上的字符键时,首先会触发 keydown 事件,然后紧跟着是 keypress 事件,最后会触发 keyup 事件。其中,keydown 和 keypress 都是在文本框发生变化之前被触发的;而 keyup事件则是在文本框已经发生变化之后被触发的。
如果用户按下了一个字符键不放,就会重复触发keydown 和 keypress 事件,直到用户松开该键为止。如果用户按下的是一个非字符键,那么首先会触发 keydown 事件,然后就是 keyup 事件。如果按住这个非字符键不放,那么就会一直重复触发 keydown 事件,直到用户松开这个键,此时会触发 keyup事件。
sear.onkeyup=function () {
var script=document.createElement("script");
script.id="list";
script.src="https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/?wd="+this.value+"&cb=showData";
var sclist=document.querySelector("#list");
if (sclist)sclist.remove();
document.body.appendChild(script);
}
//如果改为onkeydown输入数字12只会输出2
★ajax异步请求
1、实例化对象
var http = new XMLHttpRequest();
2、open
get 获取 post新建 增加数据 url地址
http.open(“get”,“url”);
3、发送请求send
http.send();
4、获取服务器响应数据
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
callback(http.response);
}
5、渲染界面
example:
<div class="listinfo">
</div>
//
var listinfo = document.querySelector(".listinfo");
function showCai(res, url, callback) {
var http = new XMLHttpRequest();
http.open(res, url);
http.send();
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
callback(http.response);
}
}
}
showCai("get", "http://localhost/travel/fenqu.php", function (data) {
var datalist=JSON.parse(data);
for (var key in datalist) {
var foodlist=document.createElement("div");
var ainfo=document.createElement("a");
ainfo.href = "./fenquxi.html?id=" + datalist[key].id;
var imginfo=document.createElement("img");
imginfo.src=datalist[key].img;
foodlist.appendChild(imginfo);
var spaninfo=document.createElement("span");
spaninfo.innerHTML=datalist[key].name;
ainfo.appendChild(imginfo);
ainfo.appendChild(spaninfo);
foodlist.appendChild(ainfo);
listinfo.appendChild(foodlist);
}
});
PHP文件
header('Access-Control-Allow-Origin: * ');
//造连接对象
$db = new MySQLi("localhost","root","","test");
mysqli_query($db,"SET NAMES 'UTF8'");
//写SQL语句
$sql = "select * from fenqu";
//检测连接数据库是否成功,失败返回“连接失败”,并退出程序
if(mysqli_connect_error()){
die("连接失败");
}
//执行SQL语句,返回结果集对象
$result = mysqli_query($db,$sql);
//判断结果有无数据
$data=array();
class User{
public $id;
public $name;
public $img;
}
if($result->num_rows){
while($row = mysqli_fetch_array($result))
{
$user=new User();
$user->id=$row["id"];
$user->name=$row["name"];
$user->img=$row["img"];
$data[]=$user;
}
}
echo json_encode($data);
?>
获取id 通过id 获取数据时
<div class="block">
</div>
//
var block=document.querySelector(".block");
var id = location.href.split("?")[1].split("=")[1];
function showlist(res,url,callback) {
var http=new XMLHttpRequest();
http.open(res,url);
http.send();
http.onreadystatechange=function () {
if (http.readyState==4&&http.status==200){
callback(http.response);
}
}
}
showlist("get","http://localhost/travel/fenquxi.php?id="+id,function (data){
var datalist=JSON.parse(data);
for (var i=0;i<datalist.length;i++){
var div = document.createElement("div");
var spaninfo = document.createElement("span");
spaninfo.innerHTML = datalist[i].name;
div.appendChild(spaninfo);
block.appendChild(div);
}
/* 另一种遍历方式 */
// for (var key in datalist) {
// var foodlist = document.createElement("div");
// var ainfo = document.createElement("a");
// ainfo.href = "./菜单.html?id=" + datalist[key].id;
//
// var spaninfo = document.createElement("span");
// spaninfo.innerHTML = datalist[key].name;
// ainfo.appendChild(spaninfo);
// foodlist.appendChild(ainfo);
// block.appendChild(foodlist);
// }
})
不需要a连接时的元素添加
for (var key in datalist) {
var foodlist=document.createElement("div");
var imginfo=document.createElement("img");
imginfo.src=datalist[key].img;
foodlist.appendChild(imginfo);
var spaninfo=document.createElement("span");
spaninfo.innerHTML=datalist[key].name;
foodlist.appendChild(imginfo);
foodlist.appendChild(spaninfo);
listinfo.appendChild(foodlist);
}
☆MYSQL
查询前10条数据
$sql = " select * from table LIMIT 10";
查询最新10条数据
$sql = " select * from xinyuan order by id desc LIMIT 20";
★原生ajax的封装
请求接口时候需要 路径 方式 数据
get 方式传值 是在url 路径之后?a=1&b=2&n=3
post 不在路径上写 send() 上发送数据
function method(res, url, data, callback) {
var http = new XMLHttpRequest();
if (res == "get") {
if (data) {
url += "?";
url += data;
}
http.open(res, url);
http.send();
}
else {
http.open(res, url);
if (data) {
http.send(data);
}
else {
http.send();
}
}
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
callback(JSON.parse(http.response));
}
}
}
method("post", "./list/data.txt", null, function (data) {
console.log(data);
});
☆异步和同步
//异步
var http = new XMLHttpRequest();
http.open("get", "./list/data.txt", rue);
http.send();
function showdata(callback) {
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
callback(http.response);
}
}
}
showdata(function (data) {
console.log(data);
});
//同步
var data=null;
var http = new XMLHttpRequest();
http.open("get", "./list/data.txt",false);
http.send();
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
console.log(1);
}
}
console.log(2);
★
☆