JQuery Ajax 跨域请求
第一种方式
客户端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