我所知道的AJAX

AJAX为“Asynchronous JavaScript and XML”(异步的JavaScript与XML技术),是一种广泛应用在浏览器的网页开发技术。Ajax是多项技术的综合应用。

1、 不同浏览器下ajax实现上的差异?

创建对象的方式不同:
var xmlHttp=window.XMLHttpRequst ? new XMLHttpRequest : new ActiveXObject('Microsof.XMLHTTP');//兼容不同浏览器

 

2、一次ajax请求过程中有哪几种状态值,不同状态值之间含义是什么?   

我们定义的函数一般会被执行3次,状态码依次返回2,3,4, 
xmlHttp.readyState:
0:表示未初始化,还没有调用send()方法
1:表示载入,已调用send()方法,正在发送请求
2:载入完成,send()方法执行完成,已经接受全部响应内容
3:交互,正在解析响应内容
4:完成,响应内容解析完成,可以在客户端调用了

 

3、ajax在跨域的情况下会出现什么状况,以及解决方案?

跨域的必要条件:

1、协议(http、https)、
2、域名(https://www.baidu.com)域名就是baidu、
3、端口(80、8080、8081)
(以上有任何一个不同都视作跨域)
 
解决方案:
A、jsonp(利用动态创建script标签来实现的)
B、document.domain(将不同的两个页面的域名修改一样)
C、window.name(两个页面的window.name是相同的,在同一浏览器下)
D、HTML5的  postMessage
function onload(){
var iframe=document.getElementById('iframe');
var win=iframe.contentWindow; //回去window对象
win.postMessage("哈哈,我实现跨域了","*");
// postMessage 第一个参数为发送的消息,只能是字符串,第二个参数为限定接受消息的那个window对象所在的域,如不想限定域,可以使用通配符 * 。
}

AJAX请求步骤:

1、创建异步对象。
2、建立链接 {
    A,请求方式(get/post),
    B、请求地址、
    C、是否异步 {
                true:表示建立异步链接,
                false:表示等待服务器的响应。
            }
    }
3、指定数据返回时回调函数(onreadystatechage )
4、发送请求(send)
实例:
var xmlHttp=window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');

    xmlHttp.open('GET','data/jsonData.json',true);

    xmlHttp.onreadystatechange=function(){
        if(xmlHttp.readyState==4 && xmlHttp.status==200){
              var jsonData=xmlHttp.responseText;//得到服务器响应的数据
              jsonData=JSON.parse(jsonData);//把json字符串转化为json对象  或者使用 jsonData=eval('('+jsonData+')');

              //处理数据
        }
    }
    xmlHttp.send(null);

Jquery的Ajax实现:

$.ajax({
    type:'POST',
    url:'http://apis.juhe.cn/cook/query',
    dataType:'jsonp',
    data:{
        'key': 'dedaec74f84b89cae6463725b1161756',
        'menu': '青椒炒肉',
        'rn': '10',
        'pn': '3'
    },
    success:function (data) {
        console.log(data);
    },
    error:function () {
    }
});

AJAX跨域之JSONP实现方式:

<head>
    <meta charset="UTF-8">
    <title>Promise</title>
    <script type="text/javascript">
        function jsonpCallback(result) {
            console.log(result);
        }
    </script>
</head>
$(function(){
var JSONP=document.createElement("script");
JSONP.type="text/javascript";
JSONP.src="http://ceshi.cc/ceshi.php?callback=jsonpCallback";
JSONP.charset="utf-8";
document.getElementsByTagName("head")[0].appendChild(JSONP);
});
PHP页面实现关键代码:
<?php
header("content-type:application/json");
if ($_GET['callback']) {
    print $_GET['callback']."(";
}
print json_encode($content);
if ($_GET['callback']) {
    print ")";
}

 

posted @ 2017-05-11 16:49  NickTong  阅读(453)  评论(0编辑  收藏  举报