Ajax与跨域

2019-05-11  本文已影响0人  遇明不散
Ajax
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>04-ajax-get</title>
</head>
<body>
<button>发送请求</button>

<script type="text/javascript">
    var btn=document.getElementsByTagName('button')[0];

    btn.onclick = function(){
        // 创建异步请求对象
        // let xmlobj = new XMLHttpRequest();
        var xmlobj = null;
        if (window.XMLHttpRequest){
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlobj = new XMLHttpRequest();
          }else{
                // code for IE6, IE5
                xmlobj = new ActiveXObject("Microsoft.XMLHTTP");
          }

        // 设置请求方式与请求地址
        // xmlobj.open('GET','04-ajax-get.php',true);
        xmlobj.open('GET','04-ajax-get.txt',true);
        // 发送请求
        xmlobj.send();
        // 监听状态的变化
        xmlobj.onreadystatechange = function(){
            if(xmlobj.readyState == 4){
                // 判断是否请求成功
                if(xmlobj.status >= 200 && xmlobj.status < 300 
                  || xmlobj.status === 304){
                    // console.log('OK');
                    console.log(xmlobj.responseText);
                }else{
                    console.log('FAILED');
                }
            }
        }
    }
</script>
</body>
</html>
// 通过为URL地址添加后缀的方式
xhr.open("GET","05-ajax-get.txt?t="+(new Date().getTime()),true);
xmlhttp.open("POST","ajax_test.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Bill&lname=Gates");
jQuery-Ajax

在 jQuery中提供了对原生的AJAX的封装

$obj.load(url,data,callback)
// 作用:异步加载数据到 $obj 元素中
// url :异步请求的地址
// data :传递给服务器端的参数(可选),
//       可以传递普通字符串,可以传递JSON
// callback:异步请求完成后要执行的操作(可选)

// 一般把回调函数设置如下:
function(resText,statusText){
    resText : 响应数据
    statusText : 响应的状态文本
}
$.get(url,data,callback,type)
// url : 异步请求地址
// data : 请求提交的数据,可以是字符串,可以是JSON
// callback : 请求成功时的回调函数
// type : 响应回来的数据的类型,即将响应回来的数据转化指定类型
//     html : 响应回来的文本是html文本
//     text : 响应回来的文本是普通文本
//     json : 响应回来的数据是JSON对象

// 回调函数
function(resText){
    resText : 表示响应回来的文本
}
$.ajax() 方法
$.ajax({请求参数的JSON对象})
// 参数对象中的属性
// url : 字符串,表示异步请求的地址
// type : 字符串,请求方式,get 或 post
// data : 传递到服务器端的参数,可以是字符串,可以是JSON对象
// dataType : 字符串,响应回来的数据的格式
//      'html'
//      'xml'
//      'text'
//      'script'
//      'json'
//      'jsonp' 
// success:回调函数,请求和响应成功时回来执行的操作
// error : 回调函数,请求或响应失败时回来执行的操作
// beforeSend : 回调函数,发送ajax请求之前执行的操作,如果return false,则终止请求发送
同源策略
function flight(data){
            let html = "<div>";
            html += "<p>航班号:" + data.flightNO+"</p>";
            html += "<p>出发:" + data.froms+"</p>";
            html += "<p>到达:" + data.tos+"</p>";
            html += "<p>时间:" + data.time+"</p></div>";
            $("body").append(html);
    }
$(function () {
        $("#btn").click(function () {
            let script = $('<script><\/script>');
            script.attr('src','http://127.0.0.1:5000/flight_server?callback=flight');
            $('body').append(script);
        });
    });
@app.route('/flight_server')
def flight_server():
    dic = {
        "flightNO":"MU763",
        "froms":'Beijing',
        "tos":"New York",
        "time":"16:55"
    }
callback = request.args.get('callback')
res = callback +"(" + json.dumps(dic) + ")"
return res
jsonp
$.ajax({
    url: "http://127.0.0.1:80/jQuery/Ajax/22-jsonp.php",
    data:{
        "teacher": "wxm",
        "age": 22
    },
    dataType: "jsonp", // 表示需要请求跨域的数据
    jsonp: "cb",  // 告诉服务器在获取回调函数名称的时候需要用什么key来获取
    jsonpCallback: "test", // 告诉服务器在获取回调函数名称的时候回调函数的名称是什么
    success: function (msg) {
        console.log(msg);
    }
});
上一篇下一篇

猜你喜欢

热点阅读