妙味ajax笔记

ajax : Asynchronous JavaScript and XML 异步JavaScript和XML

用javascript异步形式去操作xml

数据交互

var oBtn = document.getElementById(‘btn‘);

oBtn.onclick = function() {

//打开浏览器

var xhr = new XMLHttpRequest();

//在地址栏输入地址

xhr.open(‘get‘,‘1.txt‘,true);

//提交

xhr.send();

//等待服务器返回内容

xhr.onreadystatechange = function() {

if ( xhr.readyState == 4 ) {

alert( xhr.responseText );

}

}

}

兼容ie6

//打开浏览器

/*

1.创建一个ajax对象

ie6以下new ActiveXObject(‘Microsoft.XMLHTTP‘)

*/

var xhr = null;

/*if (window.XMLHttpRequest) {

xhr = new XMLHttpRequest();

} else {

xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘);

}*/

try {

xhr = new XMLHttpRequest();

} catch (e) {

xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘);

}

//在地址栏输入地址

/*

open方法

参数

1.打开方式

2.地址

3.是否异步

异步:非阻塞 前面的代码不会影响后面代码的执行

同步:阻塞 前面的代码会影响后面代码的执行

*/

xhr.open(‘get‘,‘1.txt‘,true);

//提交 发送请求

//alert(1);

xhr.send();

//alert(1)

//alert( xhr.responseText );

//等待服务器返回内容

xhr.onreadystatechange = function() {

if ( xhr.readyState == 4 ) {

alert( xhr.responseText );

}

}

抛出异常:

try {

//代码尝试执行这个块中的内容,如果有错误,则会执行catch{}, 并且传入错误信息参数

//alert(a);

//new throw();

//throw new Error(‘错了错了‘);

} catch (e) {

alert(e);

}

enctype : 提交的数据格式,默认application/x-www-form-urlencoded

readyState : ajax工作状态

responseText : ajax请求返回的内容就被存放到这个属性下面

on readystate change : 当readyState改变的时候触发

status : 服务器状态,http状态码

readyState属性:请求状态

0 (初始化)还没有调用open()方法

1 (载入)已调用send()方法,正在发送请求

2 (载入完成)send()方法完成,已收到全部响应内容

3 (解析)正在解析响应内容

4 (完成)响应内容解析完成,可以在客户端调用了

if ( xhr.readyState == 4 ) {

if ( xhr.status == 200 ) {

alert( xhr.responseText );

} else {

alert(‘出错了,Err:‘ + xhr.status);

}

}

xhr.setRequestHeader(‘content-type‘, ‘application/x-www-form-urlencoded’); 数据头类型

可以下载一个json的包

//alert(JSON)

//stringify : 可以把一个对象转成对应字符串

var arr = [1,2,3];

var j = {left:100};

/*alert( JSON.stringify(arr) );*/

/*alert( JSON.stringify(j) );*/

//parse : 可以把字符串转成对应对象

var s1 = ‘[100,200,300]‘;

var a1 = JSON.parse(s1);

//alert(a1[0])

var s2 = ‘{"left":100}‘;

var a2 = JSON.parse(s2);

alert(a2.left)

封装ajax方法:

function ajax(method, url, data, success) {

var xhr = null;

try {

xhr = new XMLHttpRequest();

} catch (e) {

xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘);

}

if (method == ‘get‘ && data) {

url += ‘?‘ + data;

}

xhr.open(method,url,true);

if (method == ‘get‘) {

xhr.send();

} else {

xhr.setRequestHeader(‘content-type‘, ‘application/x-www-form-urlencoded‘);

xhr.send(data);

}

xhr.onreadystatechange = function() {

if ( xhr.readyState == 4 ) {

if ( xhr.status == 200 ) {

success && success(xhr.responseText);

} else {

alert(‘出错了,Err:‘ + xhr.status);

}

}

}

}

setInterval(function() {

ajax(‘get‘,‘getNews.php‘,‘‘,function(data) {

var data = JSON.parse( data );

var oUl = document.getElementById(‘ul1‘);

var html = ‘‘;

for (var i=0; i<data.length; i++) {

html += ‘<li><a href="">‘+data[i].title+‘</a> [<span>‘+data[i].date+‘</span>]</li>‘;

}

oUl.innerHTML = html;

});

}, 1000);

ajax({

url : ‘getNews.php‘,

success : function(data) {

//...

}

});

JSONP

跨域的问题

域:域名

跨域请求(访问):一个域名下的文件请求另外一个域名下的资源,就产生了跨域

跨域的解决

Jsonp : json with padding

跨域:跨域名

一个域名下的文件去请求了和他不一样的域名下的资源文件,那么就会产生跨域请求

JSONP : JSON with Padding

1.script标签

2.用script标签加载资源是没有跨域问题的

把用请求的数据,用script引用的方式搞过来。

<script>

function fn(data) {

alert(data);

}

</script>

<script src="2.txt"></script>

2.txt里面的数据是:fn([1, 2, 3]) 这样数据就可以传过来了

在资源加载进来之前定义好一个函数,这个函数接收一个参数(数据),函数里面利用这个参数做一些事情

然后需要的时候通过script标签加载对应远程文件资源,当远程的文件资源被加载进来的时候,就会去执行我们前面定义好的函数,并且把数据当作这个函数的参数传入进去

当按钮点击的时候再去加载资源:

<script>

function fn(data) {

var oUl1 = document.getElementById(‘ul1‘);

var html = ‘‘;

for (var i=0; i<data.length; i++) {

html += ‘<li>‘+data[i]+‘</li>‘;

}

oUl1.innerHTML = html;

}

</script>

<script>

window.onload = function() {

var oBtn1 = document.getElementById(‘btn1‘);

oBtn1.onclick = function() {

var oScript = document.createElement(‘script‘);

oScript.src = ‘getData.php‘;

document.body.appendChild(oScript);

}

}

服务器jsonp接口代码:

<?php

$t = isset($_GET[‘t‘]) ? $_GET[‘t‘] : ‘num‘;

$callback = isset($_GET[‘callback‘]) ? $_GET[‘callback‘] : ‘fn1‘;

$arr1 = array(‘111111‘,‘22222222‘,‘33333333‘,‘4444444‘,‘555555555555555555555‘);

$arr2 = array(‘aaaaaaaaaaaa‘,‘bbbbbbbb‘,‘cccccccccccc‘,‘ddddddddd‘,‘eeeeeeeeeeee‘);

if ($t == ‘num‘) {

$data = json_encode($arr1);

} else {

$data = json_encode($arr2);

}

echo $callback.‘(‘.$data.‘);‘;

时间: 2024-10-13 08:51:46

妙味ajax笔记的相关文章

妙味课堂——HTML+CSS基础笔记

妙味课堂的课程讲得非常的清楚,受益匪浅.先把HTML和CSS基础课程部分视频的学习笔记记录如下: padding #PS基础 ##前端需要的PS技能 - PS技能(前端需要):切图.修图.测量 - PS工具: - 移动工具 - 矩形选框工具 - 裁切工具 - 吸管工具 - 横排文字工具 - 手抓(快捷键:空格) - 缩放(快捷键:Ctrl + 和 Ctrl -) - 标尺(快捷键:Ctrl R,主要是拖出参考线.矩形区域选择的时候,按住Ctrl,就能贴合参考线) - 自由变换(快捷键 Ctrl

妙味课堂——JavaScript基础课程笔记

集中时间把秒微课堂JS的基础课程看完,并且认真完成了课后练习.感觉在JS方面的技能算是入了个门了.课后练习的作业完成的代码我都汇总在了这里.至于视频课的学习笔记,则记录如下. 第01课JS入门基础_热身课程 写JS的步骤 先实现布局 想出实现原理 了解JS语法 希望把某个元素移除的实现 display: none; 显示为无 visibility: hidden; 隐藏 width \ height 透明度 left \ top 拿与背景色相同的div盖住该元素 利用margin值 …… 获取元

妙味js预热课程(一)

2016年5月24日(妙味课堂js预热课程-2笔记)一.前言 1.window.onload(事件):是在页面加载完成以后来执行一个功能: 如 window.onload=function(){ alert(“a”) } 这是一个匿名函数,因为在function后面括号前面没有名字: 即在页面加载完成以后弹出一个警告框! 2.如何提取行间事件: 3.为什么一定要用到onload? 二.主要内容 1.收缩展开菜单——if判断 如果菜单已经是显示的,把菜单隐藏: 如果菜单已经是隐藏的,把菜单显示.

妙味课堂基础篇0_3

1.日历 1 JAN 2 FER 3 MAR 4 APR 5 MAY 6 JUN 7 JUL 8 AUG 9 SEP 10 OCT 11 NOV 12 DEC 1月活动 快过年了,大家可以商量着去哪玩吧- <!DOCTYPE html PUBLIC "-//W3C//h2D XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/h2D/xhtml1-transitional.h2d"> <

妙味课堂Jquery从入门到插件开发到模拟视频教程 Jquery实战开发 Jquery UI

<jQuery课程 初级到高级到模拟>├<第一课:jQuery初级>│  ├01 妙味云课堂-jQuery简介.mp4│  ├02 妙味云课堂-jQuery设计思想之选择元素.mp4│  ├03 妙味云课堂-jQuery设计思想之写法.mp4│  ├04 妙味云课堂-jQuery设计思想之原生关系和链式操作.mp4│  ├05 妙味云课堂-jQuery设计思想之取值和赋值.mp4│  ├06 妙味云课堂-jQuery方法之filter not has.mp4│  ├07 妙味云课堂

妙味,结构化模块化 整站开发my100du

************************************************************************************* 重要:重新审视的相关知识 /* 妙味官网:www.miaov.com 技术交流:bbs.miaov.com 1.ps查看圆角度数,border-radius:; 选择->修改-> 平滑6px 2.渐变 -ms-filter:"progid:DXImageTransform.Microsoft.gradient (G

【学】CSS3的3D动画 ——3D旋转(1)—— 妙味课堂

最近学了妙味的css3的动画,2D,3D的都有,先写一个最简单的3d翻转效果,鼠标移入div,正反面翻转效果. 注意点有: 要给正反面外面加个父级: transform-style: preserve-3d;是加在正反面的父级,使动画具有3d的效果:但是ie11并不支持preserve-3d perspective也要加在父级上,使动画具有透视效果: 要给父级也加上宽高,否则动画没有效果 <style> #box{ margin: 70px auto; width: 300px; height

妙味课堂的导航效果

首页 首页 前端开发教程 前端开发教程 妙味视频教程 妙味视频教程 周末班上课安排 周末班上课安排 结课标准 结课标准 联系妙味 联系妙味 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> body,ul{margin: 0;padding: 0;} li{li

【学+原】CSS3的2D动画 ——仿NOMOS手表—— 妙味课堂

看CSS3妙味课堂中有一课是介绍如何做钟表界面,然后三根针都能随着时间转动,然后自己在那个简易的版本上做了一些进一部改进. 最关键的知识点应该是transform-origin这个样式,要选对旋转的中心点.分针秒针时针的旋转中心点应该是针的底部中间位置 这个实例还是让我第一次见到把<style>设置了id,然后写进js里去操作的,因为表面的各种小时,秒的刻度的制作,需要用循环来写,直接写css样式里是不现实的. 另外就是要把setInterval和transform:rotate结合起来使用,