1、今天写ajax请求时需要跨域请求,开始的代码如下:
前端代码:
var url = "http://localhost:8080/wechat/wxtestsurvey/getTestList.dol";
$.ajax({
url:url,
type:'POST',
cache:false,
data:{"openId":openid},
dataType: 'jsonp',
jsonp:'jsoncallback',
crossDomain: true,
success:function(data) {
alert(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
//alert("系统维护中,请稍后再试!");
alert(XMLHttpRequest.status); // 200
alert(textStatus); // parsererror
alert(errorThrown); // SyntaxError: Unexpected end of input
}
});
java代码:
@RequestMapping(value = "/getTestList", produces = "application/json;charset=utf-8")
@ResponseBody
public String getTestList(String openId,HttpServletRequest request){
String jsoncallback = request.getParameter("jsoncallback");// 客户端请求参数
JSONObject json = new JSONObject();
HashMap map = new HashMap();
map.put("name", "nick");
map.put("age", "23");
map.put("sex", "M");
map.put("code", "0");
return jsoncallback + "("+JSONObject.fromObject(json)+")";
}
结果走的却是ajax的error,真的另外百思不得其解。弹出的结果如下:
Error: jQuery19105265967122703629_1498552272260 was not called
但是看响应确实返回的也是json字符串,结果如下:
"jQuery19108484969351256605_1498551586758({\"code\":\"0\",\"name\":\"nick\",\"age\":\"23\",\"sex\":\"M\"})"
嗯!你没有看错,这是真正的字符串。
去找度娘,找啊找啊找啊!整整找了一天,一天啊!
不过却没有结果。
网上有很多说法,但是他们说的我都符合要求,但就是没啥用;
第二天我重新再找,然后我看到了$.getJSON()也可以进行跨域请求,然后我试了,
结果还是一样,就是没有成功。
我整个人快奔溃了,一个这个问题弄了这么久;
慢慢我冷静下来,我想起了我以前也写过跨域的后台代码,但是好像和这个不一样,我开始翻以前写的代码,嗯!被我找到了,然后我试着用了,我对此并不抱很大的希望,真的!但是成功了,我勒个去,心中顿时十万草泥马飞奔而过。
更改过后的代码如下:
@RequestMapping(value = "/getTestList", produces = "application/json;charset=utf-8")
@ResponseBody
public void getTestList(String openId,HttpServletRequest request,HttpServletResponse response){
String jsoncallback = request.getParameter("jsoncallback");// 客户端请求参数
String result = "";
JSONObject json = new JSONObject();
HashMap map = new HashMap();
map.put("name", "nick");
map.put("age", "23");
map.put("sex", "M");
map.put("code", "0");
result = jsoncallback + "("+JSONObject.fromObject(json)+")";
try {
response.getWriter().print(result);
} catch (IOException e) {
logger.info("异常:",e);
}
}
其响应的数据如下:
jQuery19104063224993617034_1498551266153({"code":"0","name":"nick","age":"23","sex":"M"})
最后响应成功了!
我写这个一是为了给自己一个警告,二是希望能帮助遇到和我一样情况的朋友。
说说原因吧!
因为第一次返回它是一个纯真的字符串,不算是json字符串。
第二次返回的才是json字符串;
至于为啥,还有待研究。
另外欢迎大家来扫一扫下方二维码领取支付宝红包。