第一種方式
客戶端JS:
1 function httpRequest(arg,successCallback,errorCallback){ 2 $.ajax({ 3 type: "get", 4 url:serverAddress, 5 async: false, //是否為同步or 異步,默認同步(true) 6 cache:false, //請求格式為jsonp ,script默認為false ,其它為true , 這里可以不用添加 7 data:arg, //請求參數,也可以拼接在url后邊 8 dataType: "jsonp", 9 jsonp:"callback", 10 jsonpCallback :"jsoncallback", 11 timeout : set_Timeout, //超時處理 12 success : successCallback, //成功回調 13 error : errorCallback //錯誤回調 14 }) 15 }
//調用
var arg = {name:'zs'}
httpRequest(arg,succCallback,errCallback);
function succCallback(msg){
//msg返回一個對象,解析JSON格式
}
function errCallback(){
//fail msg
}
服務器端代碼
String callbackFunName = context.Request["callback"]; //jsonp :callback 對應的值,默認不寫就是callback
context.Response.Write(callbackFunName + "(" +{ 'name':'John'}+")");
jsonp: "callback"
jsonpCallback:"jsonpCallback"
這兩個參數最終會拼接在請求的url后面,變成 http://www.xxx.com/ajax/xxx.ashx?callback=jsonCallback
ps:注意:這種方式需要客戶端與服務器端 ,同時調整下數據請求方式及服務器響應。
第二種方式
PHP 解決跨域 ,在文件頭加下邊這兩句代碼,JS 就不需要JSONP。
header("Access-Control-Allow-Origin: *");
header('content-type:application/json;charset=utf8');
java 解決跨越
xxx.setContentType("application/json; charset=utf-8");
xxx.getResponse().addHeader("Access-Control-Allow-Origin","*");//'*'表示允許所有域名訪
or
/*這里可以忽略*/
服務器端要使用
request.getParameter("jsonpCallback");//客戶端請求參數
out.println(jsonpCallback+"("+resultJSON(data)+")");//返回jsonp
