ajax

首先说一下js是单线程执行,但是存在异步执行机制(定时器和事件)
(一)什么是ajax:
ajax(ajax = 异步JavaScript和XML)是利用一系列的交互式网页应用相关的技术所形成,是一串技术的结合体,ajax内置进了浏览器(实际上是浏览器内建了XMLHttpRequest对象),所以不需要安装插件,只需要用户允许 JavaScript在浏览器上执行
(二)ajax概述:
1.ajax是JesseJamesGarrett 在 2005 年发明的。它本身不是单一技术,是一串技术的集合,主要有:
①javascript : 通过用户或其他浏览器相关事件捕获交互行为。
②XMLHttpRequest对象:ajax对象的生产者,可以在不中断其他浏览器任务的情况下向服务器发送请求。
③服务器上的文件以XML,HTML或JSON格式保存文本数据
④其他JavaScript来处理从服务器请求来的数据
2.优点:
①不需要插件
②不需要刷新整个页面,就可以对网页的部分数据进行更新
③将服务器的操作转移到客户端,请求的少加载的快,减轻了宽带的压力
3.缺点:
④IE5之前的对ajax的不支持
⑤ajax加载总在当前页面,不会回退到之前页面
⑥搜索引擎支持度不够,因为搜索引擎的爬虫还不能理解JS引起变化数据的内容
⑦开发调试工具少,相对其他语言的工具集来说,JS或Ajax调试开发少的可怜
4.①var ajax = new XMLHttpRequest()//创建一个XMLHttpRequest对象,用于与后台交换数据,不需要重新加载整个网页就能对网页的某一部分进行更新
  ②ajax.open(“GET”,“http://..?”+new Date().getTime())//设置请求参数,加上去时间戳每次请求都会更新
  ③ajax.send(null)   //已经被很多浏览器当成必选参数了
  ④ajax.onreadystatechange = function(){
   //readystate改变时会触发该函数
//时间的触发和请求状态有关
//和网速有关
//不确定多久会执行
//异步
Console.log(ajax.readyState)  //ajax对象的状态,状态码有0,1,2,3,4
0:(未初始化)还没有调用send()方法
1:(载入)已调用send()方法,正在发送请求
2:(载入完成)send()方法执行完成,已经接收到全部响应内容
3:(交互)正在解析响应内容
4:(完成)响应内容解析完成(XMLHttpRequest已成功接收到数据)可以在客户端调用了
⑤if(ajax.readyState == 4 && ajax.status == 200){
   Console.log(“可以得到结果“)
   Console.log(ajax.responseText)//后台请求的结果
}
}
http状态码: 1系列(浏览器问题)
              2系列(成功)
              3系列(js逻辑,代码问题)
              4系列(路径问题)
              5系列(服务器的问题,找后台解决)
5.封装GET获取数据:
      function ajaxGet(url,callback,data){
      if(arguments.length == 3){  //若为3则是发送数据,以此判断发送和接收
   url += “?” + data   //data为参数即字段名=字段值
}
       var ajax = new XMLHttpRequest();
       ajax.open(“GET”,url);
       ajax.send(null);
       ajax.onreadystatechange == function(){
    if(ajax.readyState == 4 && ajax.status == 200){
  var json = JSON.parse(ajax.responseText);
callback(json)
}
}
}
6.post接收数据和get没有差别,发送数据有差别。Post发送数据封装
function ajaxPost(url,callback,data){
    If(arguments.length == 2){
      Data = null ; //此时不发送数据
}
var ajax = new XMLHttpRequest() ;
ajax.open("POST","url") ;
ajax.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”)  //请求头
    ajax.send(data) ;
     ajax.onreadystatechange = function(){
    if(ajax.readyState == 4 && ajax.status == 200){
   callback(ajax.responseText) ;//获得字符串形式的响应数据}
}
}  
ajaxPost(“http://...”,function(res){
        alert(res)
},”kouling=zmkm”)
7.ajax跨域
(jsonp的应用场景; 发生跨域问题ajax不能接受或者发送数据的时候;
(jsonp前端应该做什么); 得到一个 接口 ; 动态拼接一个script ; 写一个回调函数;
(后台如何帮你完成jsonp跨域); (允许访问! => header) 调用你的函数!;
<script type="text/javascript">  
    function jsonpCallback(result) {  
        //alert(result);  
        for(var i in result) {  
            alert(i+":"+result[i]);//循环输出a:1,b:2,etc.  
        }  
    }  
    var JSONP=document.createElement("script");  
    JSONP.type="text/javascript";  
    JSONP.src="http://crossdomain.com/services.php?callback=jsonpCallback";  
    document.getElementsByTagName("head")[0].appendChild(JSONP);  
</script>  
或者:
<script type="text/javascript">  
    function jsonpCallback(result) {  
        alert(result.a);  
        alert(result.b);  
        alert(result.c);  
        for(var i in result) {  
            alert(i+":"+result[i]);//循环输出a:1,b:2,etc.  
        }  
    }  
</script>  
<script type="text/javascript" src="http://crossdomain.com/services.php?callback=jsonpCallback"></script>  
jquery中实现:
<script type="text/javascript" src="jquery.js"></script>  
<script type="text/javascript">  
    $.getJSON("http://crossdomain.com/services.php?callback=?",  
    function(result) {  
        for(var i in result) {  
            alert(i+":"+result[i]);//循环输出a:1,b:2,etc.  
        }  
    });  
</script>  
或者:
<script type="text/javascript">  
    $.ajax({  
        url:"http://crossdomain.com/services.php",  
        dataType:'jsonp',  
        data:'',  
        jsonp:'callback',  
        success:function(result) {  
           for(var i in result) {  
                alert(i+":"+result[i]);//循环输出a:1,b:2,etc.  
            }  
        },  
        timeout:3000  
    });  
</script>  
或者:
<script type="text/javascript">  
    $.get('http://crossdomain.com/services.php?callback=?', {name: encodeURIComponent('tester')}, function (json) { for(var i in json) alert(i+":"+json[i]); }, 'jsonp');  
</script>  
8.两种常用的数据交互的方式:GET,POST
   GET :最简单,轻便,快捷的数据交互方式,数据量限制在2-100k之间,安全性地,通常接收数据
   POST:最复杂,发送数据量比较大,1G以内,安全性高,主要用于发送数据
9.eval( )方法:将字符串转换成JavaScript可以认识的编码;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值