跨域

1:跨域

http://localhost:801/Ajax/JQuery.html

http://localhost:801/Ajax/JSONsever.php    

/上面的网址,协议HTTP协议,端口号801,域名一直不会产生跨域/

当协议端口号域名都不同的就会产生跨域

HTTP协议默认为80端口,HTTPS端口443 协议产生跨域   

例如更改POST方法的地址

http://127.0.0.1:801/Ajax/JSONsever.php //原来地址:http://localhost:801/Ajax/JSONsever.php

127.0.0.1  localhost: 不是一个域名虽然实际上是一样的

域名不同就会产生跨域

2:跨域解决方法

二:使用jsonp来实现跨域请求 jsonp不支持POST请求跨域

$result = ' {

        "success": "false",

        "msg": "没有该员工"

}'//json字符串的数值

$result = $jsonp.'({

        "success": "false",

        "msg": "没有该员工"

})'; //jsonp.’()’//jsonp的格式 .用来连接字符串

$.ajax({

    url: 'http://www.domain2.com:8080/login',

    type: 'get',

    dataType: 'jsonp',  // 请求方式为jsonp

    jsonpCallback: "onBack",    // 自定义回调函数名

    data: {}

});

2:HTML 5

 

http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html

header("Access-Control-Allow-Origin:*");

header("Access-Control-Allow-Method:POST,GET");

直接在服务端加上这两行代码。客户端不需要进行改变

客户端:

$.ajax({

                           type: "GET" ,

                           url:"http://127.0.0.1:801/Ajax/JSONsever.php?number=" + $('#keyword').val(),

                           dataType :"json", //格式为json但可以实现跨域

                          // jsonp : "callback",

                           success : function(data){

                                    if(data.success)

                                    {

                                            $('#search_result').html(data.msg)

                                            }

                                   else{

                                            $('#search_result').html("error" + data.msg);

                                           }      

                                    },

                          error : function(jqXHR){

                                   console.log("发生错误"+ jqXHR.status)//404错误代码

                                   }

                           })

                  

                   });//GET

五、 postMessage跨域

postMessage是HTML5 XMLHttpRequest Level 2中的API,且是为数不多可以跨域操作的window属性之一,它可用于解决以下方面的问题:

a.) 页面和其打开的新窗口的数据传递

b.) 多窗口之间消息传递

c.) 页面与嵌套的iframe消息传递

d.) 上面三个场景的跨域数据传递

用法:postMessage(data,origin)方法接受两个参数

data: html5规范支持任意基本类型或可复制的对象,但部分浏览器只支持字符串,所以传参时最好用JSON.stringify()序列化。

origin: 协议+主机+端口号,也可以设置为"*",表示可以传递给任意窗口,如果要指定和当前窗口同源的话设置为"/"。

原文地址:https://www.cnblogs.com/love-life-insist/p/9063840.html