問題1 跨域無法訪問或者放回空
問題2 跨域返回 標籤不對
這次使用ajax跨域訪問遇到以上問題,網上也找到很多的資料,可都是隻說前面或者我着急沒有仔細理解。
然後第二天有仔細的進行調試,邊看參考手冊。
ajax篇解決
預期服務器返回的數據類型。如果不指定,jQuery 將自動根據 HTTP 包 MIME 信息返回 responseXML 或 responseText,並作爲回調函數參數傳遞,可用值:
"xml": 返回 XML 文檔,可用 jQuery 處理。
"html": 返回純文本 HTML 信息;包含的script標籤會在插入dom時執行。
"script": 返回純文本 JavaScript 代碼。不會自動緩存結果。除非設置了"cache"參數。'''注意:'''在遠程請求時(不在同一個域下),所有POST請求都將轉爲GET請求。(因爲將使用DOM的script標籤來加載)
"json": 返回 JSON 數據 。
"jsonp": JSONP 格式。使用 JSONP 形式調用函數時,如 "myurl?callback=?" jQuery 將自動替換 ? 爲正確的函數名,以執行回調函數。
"text": 返回純文本字符串
解決代碼
var url='http://192.168.0.25:8080/peu/webaction.action?result=ik&format=json&jsoncallback=?';
$.ajax({
type: "POST",
url: url,
data: "",
dataType:'jsonp',
async: false,
success: function(msg){
//數據data
//var data = eval('(' + msg.result + ')');
var string = msg.result[0] ;
alert(string);
},
getJson篇,getJson是對ajax簡體封裝
function ajaxList() {
var url='http://192.168.0.25:8080/peu/webaction.action?result=ik&format=json&jsoncallback=?';
$.getJSON(url, function(data){
//var obj = eval('(' + data.result + ')');
//alert(data.result[0]);
alert(data.result[1]);
});
}
好了前臺都設置了,再好的前臺也離不開後臺支持。所謂前面一直報錯,主要理解
&jsoncallback=? 這個後綴,因爲在真正請求的時候是這樣的
瀏覽器自動添加方法名稱: jsonp136685653745920
javascript解決跨域返回就是利用 返回參數,所以返回格式必須是
jsonp136685653745920("+json_object+"). 這個是重點啊。理解了這個返回數據格式纔能有效。
所以後臺篇
public String execute(){
try
{
String chartData = "20000,9200,1181,12000,7606,13887,12000,12222,8000,9009,11288,12099,11081,12000,7606,13887,12000,12222,22000,9009,11288,12099,1181,6000,7606,13887,12000,12222,22000,9009,11288,12099,12000,17733,9876,12783,12899,13888,13277,14299,12345,12783,12899,13888,13277,14299,12345,12345,14299,12345,12345,15763,12345,15763,12000,17733,9876,12783,12899,8000";
String chartData2 = "9876,12783,12899,13888,13277,14299,12345,12345,14299,12345,12345,15763,12000,17733,9876,12783,12899,13888,13277,14299,12345,12345,15763,12000,17733,9876,12783,12899,13888,13277,14299,12345,,12345,12345,15763,12000,17733,9876,12783,12899,13888,13277,14299,12345,12345,12345,15763,12000,17733,9876,12783,12899,13888,13277,14299,12345,30000,26000";
List<String> list = new ArrayList<String>();
list.add(chartData);
list.add(chartData2);
//result = JSONUtil.(list);
JSONArray arr=JSONArray.fromObject(list);
String callback = this.getRequest().getParameter("jsoncallback");
//log.info(""+callback);
String jsoncallback = callback+"({'result':"+arr+"})";
PrintWriter out = this.getResponse().getWriter();
out.print(jsoncallback);
out.flush();
out.close();
log.info(""+jsoncallback);
}
catch (Exception e)
{
// TODO: handle exception
}
return null; //一定是返回null,不然格式還是不正確。也就是說是通過response來返回了。
}