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

  

原文地址:https://www.cnblogs.com/congxueda/p/5074198.html