Ajax跨域:jsonp仍是CORS

跨域通常用jsonp,兼容性比較好。
CORS是html5最新的XHR第二版本,不支持IE8,IE9,對移動端的支持很是好。
可是考慮項目後期這部分會轉到同域名下,並且網址不須要支持ie8,ie9,因此咱們考慮使用html5最新的跨域資源共享(CORS)來實現跨域請求。php

http://a.test.com/cross.htmlcss

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>sub domain</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" href="css/bootstrap-theme.min.css">
    <link rel="stylesheet" href="css/main.css">
    <script src="js/jquery-1.11.3.js"></script>
    <script src="js/jQuery.XDomainRequest.js"></script>
</head>

<body>
    <h3>跨域限制</h3>
    <button class="btn btn-primary btn-sm" onclick="crossAjax();">跨域請求</button>
    <hr />
    <h3>IE8,9跨域限制</h3>
    <button class="btn btn-primary btn-sm" onclick="ieCrossAjax();">跨域請求</button>
    <hr />
    <script>
    function crossAjax() {
        // var url = 'http://192.168.1.138:8080/msjc-admin/index';
        var url = 'http://b.test.com/test.php';

        $.ajax(url).done(function(data) {
            alert(data.name);
        }).fail(function() {
            alert('請求失敗');
        });
    }

    function ieCrossAjax() {
        var url = 'http://b.test.com/test.php';

        // var xdr = new XDomainRequest();
        // xdr.open("get", url);
        // xdr.onload = function() {
        //     var data = JSON.parse(xdr.responseText)
        //     alert(data.name);
        // }
        // xdr.send();


        // GET
        // $.getJSON(url).done(function(data) {
        //     alert(data.name);
        // });

        $.ajax({
            url: url,
            type: 'GET',
            dataType: 'json'
        }).done(function(data) {
            alert(data.name);
        });

        // POST
        // POST
        // $.ajax({
        //     url: url,
        //     data: {
        //         name: 'nuanfeng',
        //         gender: 'boy'
        //     },
        //     contentType: 'text/plain',
        //     type: 'POST',
        //     dataType: 'json'
        // }).done(function(data) {
        //     console.log(data);
        // });

        // $.post(url, {
        //         name: "Donald Duck",
        //         gender: "Duckburg"
        //     },
        //     function(data, status) {
        //         alert("Data: " + data.name + "\nStatus: " + status);
        //     });

    }
    </script>
</body>

</html>

 

php - server:html

<?php  
$ret = array(  
    'name' => isset($_POST['name'])? $_POST['name'] : 'myName',  
    'gender' => isset($_POST['gender'])? $_POST['gender'] : 'myGender'  
); 

// $ret = file_get_contents("php://input"); 
// $ret = $ret=>'name';
// $ret = json_encode($ret);
  
header('content-type:application:json;charset=utf8');  
// 指定可信任的域名來接收響應信息
header('Access-Control-Allow-Origin:*');  
// header('Access-Control-Allow-Methods:POST');  
// header('Access-Control-Allow-Headers:x-requested-with,content-type');  
  
echo json_encode($ret);  
?>

 

若是須要支持ie8,ie9,能夠判斷ie狀況下使用XDomainRequest來實現:html5

var xdr = new XDomainRequest();
xdr.open("get", url);
xdr.onload = function() {
    var data = JSON.parse(xdr.responseText)
    alert(data.name);
}
xdr.send();

 

上面的cross.html中,咱們引入了一個jQuery.XDomainRequest,它就是封裝了XDR(XDomainRequest)來支持ie8和ie9. (http://www.tuicool.com/articles/Njiiammjquery

 

關於CORS更詳細點的介紹:http://blog.csdn.net/fdipzone/article/details/46390573   http://www.cnblogs.com/yuzhongwusan/p/3677955.htmlajax

相關文章
相關標籤/搜索