最近在開發過程中,使用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配置實現的。平時對反向代理的理解也就是 緩存、安全、負載均衡,所以查了下方向代理