Java为后台,前端ajax访问后台请求成功但是进入不到success,反而进入error
html:
$.ajax({
type:"POST",
url:"http://192.168.43.155:8080/Video/SelectAllUserServlet",
async:true,
data:{
},
error:function(){
alert("asd");
},
success:function(result){
alert("成功");
var tbody = $("#user_all").html();
var json = $.parseJSON(result);
$.each(json, function(i,o) {
// var videosName = o.videosName;
// var videosId = o.videosId;
// var videosAddress = o.videosAddress;
tbody = tbody + ' <tr>'+
' <td>Jacob</td>'+
'<td>53275531</td>'+
'<td>12 May 2017</td>'+
'<td>'+
'<button class="btn btn-gradient-success btn-rounded" type="button">修改</button>'+
'<button class="btn btn-gradient-warning btn-rounded" type="button">删除</button>'+
'</td>'+
'</tr>';
});
$("#user_all").html(tbody);
$("#user_all").trigger("create");
}
});
后台:
response.setContentType("text/html;charset=UTF-8");
UserDao userDao = new UserDao();
ArrayList al = new ArrayList();
al = userDao.selectRecord();
String jMark = "";
PrintWriter ps = response.getWriter();
jMark = JSONArray.toJSONString(al);
System.out.println(jMark);
ps.write(jMark);
ps.flush();
ps.close();
通过浏览器查看,发现状态码是200,后台也有反应,但是就是不进入success,查了很久,有说前后台传输格式对不上,要更改dataType;还有说json格式不正确,所以导致ajax不认;
JSON格式总结下,详细的去json.org 查看。
1)键名称:用双引号 括起
2)字符串:用使用双引号 括起
3)数字,布尔类型不需要 使用双引号 括起
最后我在浏览器里找到了一条错误:
No 'Access-Control-Allow-Origin' header is present on the requested resource.'Ajax
看样子应该就是他了!!!
解决方式:
1、在java服务器端的filter或者servlet里面添加
response.setHeader("Access-Control-Allow-Origin", "*");
2、如果请求的url是aspx页面,则需要在aspx页面中添加代码
Response.AddHeader("Access-Control-Allow-Origin", "*");
3、如果请求的url是PHP页面
header("Access-Control-Allow-Origin: *");
4、如果请求的url是静态的html页面,则需要在页面中添加meta标签代码:
<meta http-equiv="Access-Control-Allow-Origin" content="*" />
“Access-Control-Allow-Origin”表示允许跨域访问,“*”表示允许所有来源进行跨域访问,这里也可以替换为特定的域名或ip。
很显然,这种方式对非网站拥有人员来说是不能做到的。而且此种方式很容易受到CSRF攻击。
如果还不行,就把这些都加上吧
// 指定允许其他域名访问
header('Access-Control-Allow-Origin:*');
// 响应类型
header('Access-Control-Allow-Methods:POST');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with,content-type');