前端:
ajax:
jsonp: "callback", //传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
jsonpCallback: "callbackSuccess", //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
当不需要特定指定回调函数时,这两个参数可不配置
$.ajax({
type: "POST",
url:url,
data:data,
dataType : "jsonp",
jsonp: "callback", //传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
jsonpCallback: "callbackSuccess", //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
async: false, //同步和异步目前无效果
success: function(data) {
console.info(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("服务器异常");
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(XMLHttpRequest.responseText);
alert(textStatus);
alert(errorThrown);
console.log(textStatus);
}
})
//回调函数
function callbackSuccess(result) {
var data = JSON.stringify(result); //json对象转成字符串
console.log(data);
}
后端:
后端接口返回时:需要进行对返回数据进行包装:包装内容为:callback+ "(" + JSONObject.toJSONString(obj) + ")"
如:ajax 中指定回调函数为callbackSuccess,则返回结果为:callbackSuccess({name:kjack,age:18})
此处特制定一个问题:
callback cann't be called异常:可以通过response response.getWriter().write(callback+ "(" + JSONObject.toJSONString(obj) + ")");解决
String callback = request.getParameter("callback"); //不指定函数名默认 callback
response.setContentType("text/plain;charset=UTF-8");
try {
response.getWriter().write(callback+ "(" + JSONObject.toJSONString(obj) + ")");
} catch (IOException e) {
e.printStackTrace();
}