SpringMvc

Spring MVC 响应 JSONP

2018-05-12  本文已影响2人  wanggs

SpringMvc 中处理 JSONP 需要注意响应的 Content-Type,如果为 text/plain 时在某些浏览器下就不能正确的执行 JSONP 的回调函数,认为其是不可执行的格式。

SpringMvc 返回对象时会把其自动的转换为 JSON 字符串,并且设置 Content-Type 为 application/json,如果返回 String 的话则 Content-Type 会设置为 text/plain,使用 JSONP 时需要返回 JSONP 格式的 String,这时例如在高版本的 Chrome 中就会出错,因为 Content-Type 是 text/plain,而不是 application/javascript。

服务器端:

import com.alibaba.fastjson.JSONPObject;
@GetMapping(value="/jsonp-test", produces="application/javascript;charset=UTF-8")
@ResponseBody
public String jsonpTest(@RequestParam String callback) {
    JSONPObject jsonp = new JSONPObject(callback);
    jsonp.addParameter("Goo"); // 或则 Object
    return jsonp.toString();
}

浏览器端

$.ajax({
    url     : 'http://127.0.0.1:8080/jsonp-test',
    type    : 'GET',
    dataType: 'jsonp', // 表示要用 JSONP 进行跨域访问
    success : function(data) {
        console.log(data);
    }
});
上一篇下一篇

猜你喜欢

热点阅读