因为网页上要添加跨站通信的功能。于是,一翻搜索和试验,得到了想要的结果。写下来当作总结。
JQuery
JQuery 提供了几种跨站通信的方法
JSONP
$.getJSON('http://server/path/someaction?callback=?', 'JSON data', function(data) {
// Handle the JSON data
});
callback=? 算是一个固定格式,JQuery在这个HTTP Request发送出去后,会将 '?' 替换成一个随机生成Function Name,HTTP Server得到这个Function Name (假设为JSONP1234)后,在返回数据时可以写入如
JSONP1234('response JSON data')
这样的字符串。实际上就是在返回时,JQuery会执行次Script,将数据传如回调的处理函数中。
AJAX POST
$.ajax({
type:'POST',
url: 'http://server/path'
crossDomain: true,
data: 'data'
dataType: 'data type'
success: function(data, status, qXHR) {
}
error: function(data, status, error) {
}
});
这个没有什么太多需要强调的了,不过,需要注意的是,Server端在HTTP RESPONSE时要加入
Access-Control-Allow-Origin: *\r\n
否则在FireFox中会表现为通信失败,这个 '*' 也可以写成其它制定的域名,并不仅限于 '*'
IE
IE有些特别,在Cross Domain Post中是用了自己提供的API,如果在IE中调用上面Ajax的方法,会有错误发生。
IE 8+以上的版本都支持,XDomainRequest
if ('XDomainRequest' in window) {
var xdr = new XDomainRequest();
xdr.onload = function() {
// Handle Response Data
}
xdr.open('POST', 'http://server/path');
xdr.send('data');
}
需要注意的是,在使用前先判断一下是否可以用 XDomainRequest.
HTTPS
现在很多网站为了安全都使用了HTTPS的通信方法,这里需要注意的是,如果发起跨站通信的网页时HTTPS的,那么将要通信的那端也必须是HTTPS的(并且网站的证书需要受信)否则通信将会失败(如Chrome)