JSONP解决跨域请求
- 虽然请求类型是非xhr,但JSONP 创建的是SCRIPT标签,而后台返回的是json对象,造成请求类型不一致;
- 使用JSONP,后台需要作改动;
- 后台增加 JsonpAdvice类 ----即后台代码需要作改动
前台html实现代码:
// jsonp测试方法
it("jsonp请求", function(done) {
// 服务器返回的结果
var result;
$.ajax({
url: base +"/get1",
dataType: "jsonp",
jsonp: "callback",
cache:true,
success: function(json){
result = json;
}
});
// 由于是异步请求,需要使用setTimeout来校验
setTimeout(function() {
expect(result).toEqual({
"data" : "get1 ok"
});
// 校验完成,通知jasmine框架
done();
}, 100);
});
后台代码:
package com.xibei.ajaxserver;
import org.springframework.web.bind.annotation.ControllerAdvice;
/**
* POM中org.springframework.book 版本为2.1.6 为了达到演示的效果,将版本下降到1.5.9
* AbstractJsonpResponseBodyAdvice 才能引用
*/
import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice;
@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice(){
super("callback");
}
}