什么是跨域

JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。首先什么是跨域,简单地理解就是因为JavaScript同源策略的限制, 域名下的js无法操作或是c.域名下的对象。

 

function refreshDict(){

$.ajax({

type: "POST",

async: false,

cache : false,

url: "${appPath}/admin/dict/refreshDict.do",

dataType: "text",

success: function(data){

if(data == "success"){

msg = msg +"管理端刷新<span style='color:green;'><b>成功</b></span>";

}else{

msg = msg +"管理端刷新<span style='color:red;'><b>失败</b></span>";

}

},

error : function() {

msg = msg +"管理端刷新<span style='color:red;'><b>异常</b></span>";

}

});

msg += "<br>";


<c:forEach items="${interface_addr_list}" var="v" >

alert('${dValue}');

</c:forEach>


$.ajax({

type: "get",

async: false,

cache : false,

dataType:"jsonp",/*加上datatype*/

url: "http://192.168.1.253:8080/mobile2/refreshDict.json?jsoncallback=callback"

});


}

//callback方法名是固定的

function callback(data) {

if(data.code == "success"){

msg = msg +"接口服务端刷新<span style='color:green;'><b>成功</b></span>";

}else{

msg = msg +"接口服务端刷新<span style='color:red;'><b>失败</b></span>";

}

layer.alert(msg);

msg = "";

}


后台接口服务要返回内容类似如下:

String callbackName = request.getParameter("jsoncallback");

return callbackName+"({\"code\":\"SUCCESS\"})";

 

 

不想用ajax跨域也可以用后台请求:



public class HttpRequestUtil {


/**
* 发送Http post请求
* @param reqUrl
* @param data
* @return
*/
public static String doHttpPost(String reqUrl, String data) {
byte[] xmlData = null;
if(data != null){
xmlData = data.getBytes();
}
InputStream instr = null;
//java.io.ByteArrayOutputStream out = null;
try {
URL url = new URL(reqUrl);
URLConnection urlCon = url.openConnection();
urlCon.setDoOutput(true);
urlCon.setDoInput(true);
urlCon.setUseCaches(false);
urlCon.setRequestProperty("content-Type", "application/json");
urlCon.setRequestProperty("charset", "utf-8");
//urlCon.setRequestProperty("Content-length", String.valueOf(xmlData.length));
DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream());
if(xmlData != null){
printout.write(xmlData);
}
printout.flush();
printout.close();
instr = urlCon.getInputStream();
byte[] bis = IOUtils.toByteArray(instr);
String ResponseString = new String(bis, "UTF-8");
/*if ((ResponseString == null) || ("".equals(ResponseString.trim()))) {
BaseConstant.MY_LOG.info("返回空");
}*/
BaseConstant.MY_LOG.info("返回数据为:" + ResponseString);
return ResponseString;
} catch (Exception e) {
e.printStackTrace();
return "-1";
} finally {
try {
/*if(out != null){
out.close();
}*/
if(instr != null){
instr.close();
}
} catch (Exception ex) {
return "-1";
}
}
}

public static void main(String[] args) {
doHttpPost("http://192.168.1.254:8080/mobile2/refreshDict.json", null);
}
}


 

 



public static String doHttpPost(String reqUrl) {
InputStream instr = null;
String result = null;
try {
URL url = new URL(reqUrl);
URLConnection urlCon = url.openConnection();
//获取响应码
/*HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(reqUrl).openConnection();
httpURLConnection.setRequestMethod("POST");
int status = httpURLConnection.getResponseCode();
httpURLConnection.disconnect();
BaseConstant.MY_LOG.debug(status);*/
urlCon.setDoOutput(true);
urlCon.setDoInput(true);
urlCon.setUseCaches(false);
urlCon.setRequestProperty("content-Type", "application/json");
urlCon.setRequestProperty("charset", "utf-8");
DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream());
printout.flush();
printout.close();
instr = urlCon.getInputStream();
result = IOUtils.toString(instr, StandardCharsets.UTF_8);
/*byte[] bis = IOUtils.toByteArray(instr);
return result = new String(bis, "UTF-8");*/
return result;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(instr != null){
instr.close();
}
} catch (Exception ex) {
BaseConstant.MY_LOG.error("InputStream关闭异常" + ex);
}
}
return result;
}