什么是跨域

因为javascript同源策略的限制,a.com 域名下的js脚本无法操作b.com或是c.a.com域名下的对象.Ajax的应用中,由于安全的问题,浏览器默认是不支持javascript跨域调用的.

  1. 主域相同,子域不同,如xxx.aaa.comyyy.aaa.com
  2. 域名相同,端口不同,如xxx.aaa.com:8000xxx.aaa.com
  3. 域名相同,协议不同,如http://www.aaa.com/https://www.aaa.com/
  4. 主机相同,用ip和域名的http://127.0.0.1/http://localhost/

都是会造成跨域的。网上有很多解决办法,下面介绍使用JQuery的getJSON方法处理跨域问题.

同一域名下$.getJSON()请求

js:

var url="http://localhost:2589/a.ashx";
$(function(){
    $.getJSON(url,function(data){
        alert (data.Name);
    })
});

服务器返回字符串:

{"Name":"loogn","Age":23}

不同域名下$.getJSON()请求

js:

var url="http://localhost:2589/a.ashx?callback=?";
$(function(){
    $.getJSON(url,function(data){
        alert (data.Name);
    })
});

服务器返回字符串:

jQuery1706543070425920333_1324445763158({"Name":"loogn","Age":23})

$.getJSON()跨域请求时的参数名callback也可换成jsoncallback,jsoncallback应该优先检测,没有再检测callback(没测试!!)

也可是具体的函数名,这样回调函数就不能是匿名的了,用生成只是jQuery为我们的一般操作提供的一个便利。