ajax小心得

神马是Ajax

通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

封装原生ajax函数

type:传值方式get post。
http://www.cnblogs.com/zhangpengshou/archive/2012/07/09/2583096.htmlRect机制
uri:要访问的服务器的地址
async:同步异步请求默认为异步操作若为同步操作,访问数据的时候,页面无法进行任何操作,呈现出一种假死状态;同步操作是相对安全的
obj:(相当于jq中的data属性
angular params:{}//get方式
data:{}//post)传递一个json对象进去(后端规定传递的数据:传递给后端的值)
fun:回调函数有返回数据时进行的操作

function ajax(type,url,async,obj,fun){
  var str = "";
 /*循环遍历传进来的json对象(遍历json都是用for in循环key代表后端规定传递的数据,obj[key]代表传递给后端的值)*/
  for(var key in obj){
    str += key + '=' + obj[key]+'&';
    //拼接成类似uname=’admin’&upass=’123456’&
  }
  if(str!=""&&type=='get'){
  //uname=’admin’&upass=’123456’&结尾处多了个&去掉它
    url+="?"+str.substring(0,str.length-1);
    //如果是get方式发送一个空的字符串,send(str)
    str='';
  }
  var xhr;
  //兼容ie低版本7以下
  if(*window*.XMLHttpRequest){
    xhr=newXMLHttpRequest();
   }else{
    xhr=newActiveXObject('Microsoft.XMLHTTP')
   }
   //async异步执行向服务器发送请求open
   //基础配置信息open(method,uri,async)
  /*method*:请求的类型;GET或POST
   *url*:文件在服务器上的位置
   *async*:true(异步)或false(同步)*/
    xhr.open(type,url,async);
    xhr.send(str);//将请求发送到服务器。Get传递空Post传递str字符串
    xhr.onreadystatechange = function(){
    //创建信息返回0 配置信息返回 1 发送信息完成返回     2访问数据结束返回4
    /*xhr.statusHTTP协议状态码
    xhr.status==200访问资源路径正确并且结束成功正确
    xhr.status==304缓存路径
    xhr.status==400请求参数错误(参数传少了)
    xhr.status==404访问路径错误路(路径写错了)
    xhr.status==500后台服务器错误*/
    if(xhr.readyState==4&&xhr.status==200){
      //responseText 获得字符串形式的响应数据。
      var data=xhr.responseText;
      //异常处理机制
       try{
          //JSON.parse将JSON字符串转换为对象
         var e=JSON.parse(data);
        }catch(s){
         console.info(s); //抛出异常
        };
        fun(e);
    }
  }
}

调用ajax

var url = "后端提供的网址",
var obj = {
  upass:页面获取的用户名,
  upass:页面获取的密码,
}
ajax('get',url,true,obj,function(e){
  if(e.code==200&&e.data){
    alert('登陆成功');
    window.location=index.html';
    }else{
    alert('对不起我们服务器挂掉了');
  }
})

同源安全策略

是网景公司提出的一个著名的安全策略,只有在域名端口协议相同时才进行访问;
同源是指域名,协议,端口相同

Jsonp跨域处理

JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。Callback回调函数~~~
跨域原理:利用js构造一个script标签,把json的url赋给script的scr属性,把这个script插入到dom里,让浏览器去获取。

function jsonp(url,data){
  var param='';
  for(var in data){
    param+=i+'='+data[i]+'&';
  }
  //跟ajax一样,获取url后的一串字符串
   url+='?'+param;
   var domScript = document.createElement('script');
  //创建一个script标签
  domScript.src=url;
  //给script标签添加地址,将script(带有src地址)插入到head中
  document.getElementsByTagName('head')[0].appendChild(domScript);
}
//测试访问的是360天气,传递值会返回城市天气等等数据
 var url="http://cdn.weather.hao.360.cn/api_weather_info.php";
 var data={app:'hao360',code:101011200,_jsonp:"weath"}
 jsonp(url,data);
 function weath(e) {
  var weathArr=e.weather;
  var dayWeath=[];
  var nightWeath=[];
  var dateArr=[]
  for(var i=0;i<weathArr.length;i++){
    var everyday=weathArr[i];
    dayWeath.push(everyday.info.day[2]);
    nightWeath.push(everyday.info.night[2]);
    dateArr.push(everyday.*date*.substring(5));
  }
}
//script标签引用的内容我们获取不到,则返回一个自动运行的函数;
//由前端给后端传递函数名

Jquery中的ajax

常用方法
load(url,[data],[callback])常用于远程将html代码插入dom元素中
url:(必填)请求html页面的url地址、
若data为空则为get方式传值,否则post方式
如$(‘#demo’).load(‘text.html’)将text页面的内容加入到id为demo的div中,
注意:load()方法 无论Ajax请求是否成功,只要当请求完成后,回调函数就被触发

$.get(url,[data],[callback],[type])以get方式进行ajax请求
    Type:服务器端返回内容的格式(xml,html,script·,json,text)
    Callback函数
    function(e,textStatus){
      //e:返回的内容
      //请求数据返回的状态有success error
}

$.post()以post方式进行ajax请求
Get方式跟post方式的区别get方式对传输的数据大小有限制(通常不能大于2kb),get方式请求的数据会被浏览器缓存起来,其他人可以从浏览器的历史记录中取得这些数据,安全性差。
$.getJSON()用于加载json文件
最麻烦但最正宗的方法:
$.ajax(
{
type:’get’,
url:’’,
success:function(e){
}
}
常用参数:url,type:请求方式(get/post),
data:传json对象后者string字符串 建议传json对象 好理解一点;
注意:
1、如果在ajax外部获取ajax的数据,必须使用全局变量来进行定义
2、ajax后添加进来的数据 如果 想绑定事件,一般使用事件委托jq的on()方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容