JFinal跨域方法的兩種實現

在項目中須要經過ajax方法遠程調用其它JFinal服務器的服務,會報出No 'Access-Control-Allow-Origin' header is present on the requested resource錯誤。瀏覽器默認不容許跨域 。這裏提供兩種方法。java

正常調用以下:ajax

客戶端json

$.ajax({
			type : "post",
			url : "http://192.168.0.5/order",
			data : data,
			dataType : "json",
			contentType: "application/x-www-form-urlencoded; charset=UTF-8",
			async: false,
			cache: false,
			success:function(response){
				//擴展回調函數
				if( callback != null ){
					callback(response);
				}
			},
			error : function() {
				alert("服務器發生錯誤");
			}
		});

服務端
跨域

public class OrderController extends Controller {
	
	private static Logger log = Logger.getLogger(OrderController.class);
	
	public void index() {			
		Map<String, Object> json = new HashMap<String, Object>();
		json.put("info", "下單成功! ");
		json.put("status", "1");
		renderJson(json);				
		}
	}

此時發現跨域請求沒法實現,有以下兩種方法。瀏覽器

1、在服務端進行設置跨域許可設定。在controller方法中加入getResponse().addHeader("Access-Control-Allow-Origin", "*");便可。安全

public class OrderController extends Controller {
	
	private static Logger log = Logger.getLogger(OrderController.class);
	
	public void index() {
	    getResponse().addHeader("Access-Control-Allow-Origin", "*");	
	        	
		Map<String, Object> json = new HashMap<String, Object>();
		json.put("info", "下單成功! ");
		json.put("status", "1");
		renderJson(json);				
	}
}

2、經過jsonp進行。避免方法一的安全隱患。服務器

客戶端代碼格式由json改成jsonpapp

$.ajax({
			type : "post",
			url : "http://192.168.0.5/order",
			data : data,
			dataType : "jsonp",
			contentType: "application/x-www-form-urlencoded; charset=UTF-8",
			async: false,
			cache: false,
			success:function(response){
				//擴展回調函數
				if( callback != null ){
					callback(response);
				}
			},
			error : function() {
				alert("服務器發生錯誤");
			}
		});

要理解json和jsonp的不一樣之處,對服務端返回格式進行調整async

public class OrderController extends Controller {
	
	private static Logger log = Logger.getLogger(OrderController.class);
	
	public void index() {	       	
	        	
		Map<String, Object> json = new HashMap<String, Object>();
		json.put("info", "下單成功! ");
		json.put("status", "1");
		String callback=getRequest().getParameter("callback");
		json.put("res", true);
		String jsonp=callback+"("+JsonKit.toJson(json)+")";
		renderJson(jsonp);				
		}
	}
相關文章
相關標籤/搜索