最近在開發過程中,使用ajax去異步調取圖片。在開發中這個功能沒什麼問題,可以後來提測,重新部署之後就有問題了,這就是ajax的跨域問題。
ajax本身是不支持跨域的,這是由於javascript的同源策略所導致。但是我們可以通過其他方法來解決ajax的跨域問題。
1 由於我們是利用了jquery來寫的ajax,我們一開始是准備 利用jsonp來解決的,客戶端類似下面寫法
$.ajax({
type : "get",
async:false,
url : "http://www.xxx.com/ajax.do",
dataType : "jsonp",
jsonp: "callbackparam",//服務端用於接收callback調用的function名的參數
jsonpCallback:"success_jsonpCallback",//callback的function名稱
success : function(json){
alert(json);
alert(json[0].name);
},
error:function(){
alert('fail');
}
});
服務器端寫法
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
String callbackFunName = context.Request["callbackparam"];
context.Response.Write(callbackFunName + "([ { name:\"John\"}])");
}
這個方法其實蠻簡單的,跟我們之前寫的改動不大。
2 由於我們這次項目開發的頁面比較多,改動起來涉及的地方就比較多了。最後是采取的 直接修改nginx配置實現的。平時對反向代理的理解也就是 緩存、安全、負載均衡,所以查了下方向代理