Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 未对来自两个不同端口的JSONP请求设置内容类型_Php_Jquery_Wordpress_Spring Mvc_Jsonp - Fatal编程技术网

Php 未对来自两个不同端口的JSONP请求设置内容类型

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

这种情况真让我受不了。来自to的jsonpjqueryajax请求从不设置内容类型,当试图在controller参数中序列化我的javabean时,springmvc会在服务器上抱怨。如果我在调用同一域的任一网站上测试JSONP请求,它会设置内容类型。这是港口问题吗?我正在测试一个Wordpress站点,以在我的本地服务器上运行SpringMVCAPI

java-这就是Spring框架中发生错误的地方

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>

注意:当使用jQuery
somefunction时,它实际上是一个自动生成的名称。

如果需要帮助,你需要包含一些代码。如果需要帮助,你需要包含一些代码。是否还有设置requestI的内容类型的方法?我删除了@ResponseBy,它成功了,但是JavaBean不再填充了。@Mike-看起来您只是返回了JSON。您需要将其包装在对参数中指定的回调函数的调用中,以使其工作。是否仍有设置requestI的内容类型的方法?我删除了@ResponseBy,它工作了,但JavaBean不再填充。@Mike-看起来您只是返回JSON。您需要将其包装在对参数中指定的回调函数的调用中,以使其工作。