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