Php 未对来自两个不同端口的JSONP请求设置内容类型
这种情况真让我受不了。来自to的jsonpjqueryajax请求从不设置内容类型,当试图在controller参数中序列化我的javabean时,springmvc会在服务器上抱怨。如果我在调用同一域的任一网站上测试JSONP请求,它会设置内容类型。这是港口问题吗?我正在测试一个Wordpress站点,以在我的本地服务器上运行SpringMVCAPI java-这就是Spring框架中发生错误的地方Php 未对来自两个不同端口的JSONP请求设置内容类型,php,jquery,wordpress,spring-mvc,jsonp,Php,Jquery,Wordpress,Spring Mvc,Jsonp,这种情况真让我受不了。来自to的jsonpjqueryajax请求从不设置内容类型,当试图在controller参数中序列化我的javabean时,springmvc会在服务器上抱怨。如果我在调用同一域的任一网站上测试JSONP请求,它会设置内容类型。这是港口问题吗?我正在测试一个Wordpress站点,以在我的本地服务器上运行SpringMVCAPI java-这就是Spring框架中发生错误的地方 MediaType contentType = inputMessage.getHeaders
MediaType contentType = inputMessage.getHeaders().getContentType();
if (contentType == null) {
StringBuilder builder = new StringBuilder(ClassUtils.getShortName(methodParam.getParameterType()));
String paramName = methodParam.getParameterName();
if (paramName != null) {
builder.append(' ');
builder.append(paramName);
}
throw new HttpMediaTypeNotSupportedException(
"Cannot extract parameter (" + builder.toString() + "): no Content-Type found");
}
java-API端
@RequestMapping(value="/badge/get")
public @ResponseBody IHttpResponse getBadge(@RequestBody GetBadgeRequest request) {
apiService.getBadge(request);
return request.getResponse();
}
api.js-Wordpress
getBadge : function(id) {
var model =
{
id : id
};
this.call({ url: 'badge/get.json', type: 'GET', data: model, callback: function(data)
{
alert(data);
}});
},
call : function(options) {
var def = {
url : '',
type : "POST",
dataType : 'jsonp',
data : undefined,
contentType : "application/json",
callback : function() {},
errorCallback : function() {}
};
$.extend(def, options);
var sessionToken = api.getSession();
if(sessionToken && sessionToken != "undefined") {
if(!def.data) {
def.data = {};
}
def.data.sessionToken = sessionToken;
}
var url = config.baseUrl + def.url;
// Abort Request If Another One Is Made
if (config.request != null)
config.request.abort();
if (def.showLoader) {
application.loader(true);
}
config.request = $
.ajax({
url : url,
type : def.type,
data : { request: $.toJSON(def.data) },
dataType : def.dataType,
contentType : def.contentType,
success : function(data) {
if (def.showLoader) {
当前域之外的JSONP请求始终作为脚本请求进行,以绕过同一源策略。参数将被编码到url中(即,没有POST,只有脚本的GET)。由于无法在脚本请求中指定内容类型,因此不会显示该类型。在本地完成时,它会保留内容类型,因为它实际上发出了一个真正的AJAX请求 从本质上讲,对不同域的JSONP的AJAX请求转换为:
<script type="text/javascript" src="http://example1.com:8080/badge/get.json?request=...&callback=somefunction">
</script>
注意:当使用jQuery
somefunction时,它实际上是一个自动生成的名称。当前域之外的JSONP请求始终作为脚本请求进行,以绕过同一源策略。参数将被编码到url中(即,没有POST,只有脚本的GET)。由于无法在脚本请求中指定内容类型,因此不会显示该类型。在本地完成时,它会保留内容类型,因为它实际上发出了一个真正的AJAX请求
从本质上讲,对不同域的JSONP的AJAX请求转换为:
<script type="text/javascript" src="http://example1.com:8080/badge/get.json?request=...&callback=somefunction">
</script>
注意:当使用jQuerysomefunction时,它实际上是一个自动生成的名称。如果需要帮助,你需要包含一些代码。如果需要帮助,你需要包含一些代码。是否还有设置requestI的内容类型的方法?我删除了@ResponseBy,它成功了,但是JavaBean不再填充了。@Mike-看起来您只是返回了JSON。您需要将其包装在对参数中指定的回调函数的调用中,以使其工作。是否仍有设置requestI的内容类型的方法?我删除了@ResponseBy,它工作了,但JavaBean不再填充。@Mike-看起来您只是返回JSON。您需要将其包装在对参数中指定的回调函数的调用中,以使其工作。