1.前端:
前端的ajax請求和普通JQuery下的ajax請求沒有什麼大區別。
$.ajax({
url:url,
type:"get",
dataType:"json",
data:{filename:week()+'.json'},//ajax的cors請求,和普通ajax請求一樣把參數放進data屬性裏,且不需要在URL添加callback參數。
success:function (result) {//那麼ajax的cors請求和普通請求又有什麼區別呢?僅僅只是在java tomcat中配置允許2個包就可
alert("success 函數已經成功調用!");
for(i in result.theTeams){
alert(result.theTeams[i].teamname);
}
},
error:function (jqxtr,status) {alert("請求失敗,status:"+jqxtr.status+status+" readystate:"+jqxtr.readyState+" status TEXT:"+jqxtr.statusText,errorThrown);
}//我要對error返回函數的參數有更深刻的認識!這樣才能debug!
//debug完成了,是服務器端錯誤,如果callback我留空不寫,那麼就會造成錯誤,我要去看日誌。
//日誌錯誤找到了,發現是因爲不瞭解servlet中getParameter返回值,如果沒有這個值就會返回null而不是空字符串對象“”
});
-------------------可略過-----------------------------------------------------------------------
爲了方便debug,記得了解一下error function()的三個輸入參數。
第一個參數 jqXHR jqXHR:這裏的jqXHR是一個jqXHR對象,在Jquery1.4和1.4版本之前返回的是XMLHttpRequest對象,1.5版本以後則開始使用jqXHR對象,該對象是一個超集,就是該對象不僅包括XMLHttpRequest對象,還包含其他更多的詳細屬性和信息。
這裏主要有4個屬性:
readyState :當前狀態,0-未初始化,1-正在載入,2-已經載入,3-數據進行交互,4-完成。
status :返回的HTTP狀態碼,比如常見的404,500等錯誤代碼。
statusText :對應狀態碼的錯誤信息,比如404錯誤信息是not found,500是Internal Server Error。
responseText :服務器響應返回的文本信息
第二個參數 String textStatus:返回的是字符串類型,表示返回的狀態,根據服務器不同的錯誤可能返回下面這些信息:“timeout”(超時), “error”(錯誤), “abort”(中止), “parsererror”(解析錯誤),還有可能返回空值。
第三個參數 String errorThrown:也是字符串類型,表示服務器拋出返回的錯誤信息,如果產生的是HTTP錯誤,那麼返回的信息就是HTTP狀態碼對應的錯誤信息,比如404的Not Found,500錯誤的Internal Server Error。
-------------------可略過-----------------------------------------------------------------------
後端JAVA tomcat(7.0)需要處理的就是在tomcat和你的webapp中配置兩個包就可以。
cors-filter-1.7.jar
java-property-utils-1.9.jar
【後續版本請https://mvnrepository.com/search?q=java-property-utils在maven倉庫網搜索下載】
上傳到
- tomcat/lib裏面
- webapp/你的應用/WEB-INF/你的lib裏面。
- 配置你應用的web.xml
配置方法:
添加下面的filter作爲你的第一個filter【必須是第一個】。
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, PUT, DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然後CORS的配置就算是完成啦!你的api就能輕鬆被其他域的前端調用了。
最後,稍微提一下另一種跨域解決方案JSONP。
JSONP 通過傳script的方法來達成跨域,在JQuery的ajax中也有一定程度的封裝。
在JQuery ajax中把ajax dataType改爲 dataType:“jsonp”
便可以正常使用。 他會默認給你一個系統生成的callback函數名稱(可以理解爲success參量的函數),然後請求完了之後就把數據放進你success函數裏,過程是自動化的很方便。至於其他參數什麼的,只需要在data參量中{參量名:參量值,參量名:參量值}
就可以了,跟普通ajax一樣的。