在 Ajax 的使用中,遇到了一個(gè)這樣的問(wèn)題:界面開(kāi)發(fā)出來(lái)是用在手機(jī)上使用的,但是數(shù)據(jù)是通過(guò)服務(wù)器提供的 API,在界
面上使用 JQuery 的 Ajax 來(lái)調(diào)用數(shù)據(jù),開(kāi)始怎樣也調(diào)用不到,而且不報(bào)毛病,后面現(xiàn)在瀏覽器測(cè)試好了,在放手機(jī)上加載本地的界面。
1、服務(wù)器關(guān)鍵代碼以下:
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/javascript");//這個(gè)要注意
PrintWriter out = response.getWriter();
String callback = request.getParameter("callback");
out.print(callback
+ "([{ name:'John',age:'19'},{ name:'joe',age:'20'}])");
System.out.println("callback = " + callback);
out.flush();
out.close();
}
2、界面關(guān)鍵代碼:
$.ajax({
url:"http://localhost:8081/JsonpServer/JsonpServlet",
dataType:"jsonp",
jsonp:"callback",//傳遞給要求處理程序或頁(yè)面的,用以取得jsonp回調(diào)函數(shù)名的參數(shù)名(默許為:callback),需和服務(wù)器端一致
jsonpCallback:"person",//自定義的jsonp回調(diào)函數(shù)名稱,默許為jQuery自動(dòng)生成的隨機(jī)函數(shù)名
success:function(json){
//alert(json[0].name);
}
});
// 相當(dāng)于重寫(xiě)success后履行的函數(shù)(自定義為person)
function person(json){
alert("I am person function...");
alert(json[0].name);
}
分析:
最開(kāi)始沒(méi)有效果是 dataType:"json", 所以測(cè)試了很久都沒(méi)有出來(lái), 后面修改成 dataType:"jsonp", 就能夠使用了。
緣由是 dataType 為 json 數(shù)據(jù)格式的時(shí)候,不能跨域訪問(wèn),jsonp 是跨域訪問(wèn)的。
以下課程能幫你對(duì)XML有更好的了解: