1.ajax技术的核心:xmlHttpRequest对象
同步请求
异步请求
状态码:304意味着响应有效,且请求的资源并没有被修改,200作为成功的标志
xhr.open("get","example.php?name1=value1&name2=value2",true);
function addURLParam(url,name,value){
url+=(url.indexOf("?")==-1? "?":"&");
url +=encodeURIComponent(name)+"="+encodeURIComponent(value);
return url;
}
2.ajax 跨域请求的问题
什么是ajax跨域请求?
浏览器对AJAX跨域限制很严格,我有一个主机,IP为A,A上80端口,81端口都有服务,然后IP为A的主机上绑定了两个域名,www.test.com 和www.test1.com,通过这两个IP都能方位到80的服务,但是如果在www.test.com上用AJAX请求www.test1.com的URL,就不行。就属于跨域。同样,www.test.com上访问www.test.com:81的请求也是跨域。虽然是同一个主机,同一个IP,但是只要域名不一致,甚至端口不一致,都属于跨域。
首先,比较一下json与jsonp格式的区别:
json格式:
{
"message":"获取成功",
"state":"1",
"result":{"name":"工作组1","id":1,"description":"11"}
}
jsonp格式:
callback({
"message":"获取成功",
"state":"1",
"result":{"name":"工作组1","id":1,"description":"11"}
})
javascript 不同的框架,都有实现跨域请求的机制:
(1)jsonp
jquery ajax 跨域请求
$(document).ready(function(){ var url='http://localhost:8080/WorkGroupManagment/open/getGroupById" +"?id=1&callback=?'; $.ajax({ url:url, dataType:'jsonp', processData: false, type:'get', success:function(data){ alert(data.name); }, error:function(XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.status); alert(XMLHttpRequest.readyState); alert(textStatus); }}); });angularJS 的跨域请求解决方案
$http.jsonp :
callback=JSON_CALLBACK
,就是这么固定写死的。
(2)CORS