无法进行 JSONP 调用

Can't make JSONP call

这个问题真的让我抓狂...我有 2 个 java 网络应用程序:appA 发布了一个 REST 服务,returns [=30] 中的某个对象(包含图像) =] 格式,以及使用服务并显示图像的 appB。在我的本地机器上它可以工作(虽然我看到了 CORS 错误)但现在我使用的是网络环境 (Layershift) 并且我收到错误 "NetworkError: 404 Not Found - http://app-demo.j.layershift.co.uk/myservice/get/c80e9306105f4448?callback=myCallback&_=1477167892656"
我已经阅读了很多 CORS 和 JSONP 的示例,但我找不到我的代码有什么问题,有人可以给出提示吗?

appA 中的控制器:

@RestController
public class MyController {
@RequestMapping(value="/myservice/get/{somevar}")
public @ResponseBody MyObject getMyObject (@PathVariable String somevar, HttpServletRequest request, HttpServletResponse response) {
    MyObject obj = new MyObject();
    //some logic
    return obj;
}
}

appA 中的 ControllerAdvice:

@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice() {
    super("myCallback");
}
}

java在 appB 中调用 jsonp 的脚本代码:

(function($) {
function myCallback(data) {
    if (data.status == "OK") {
        //shows the image contained
    }
}

$.fn.callWithJsonP = function(somevar) {
    $.ajax({
        url: "myservice/get/" + somevar,
        type: 'GET',
        dataType: "jsonp",
        jsonpCallback: "myCallback"
    });
};
})(jQuery);

任何帮助将不胜感激,问候
PS:也尝试在 Apache 中添加指令 "Header add Access-Control-Allow-Origin "*"",但结果相同。

以下是使用 Jquery 执行 JsonP ajax 调用的方法。 例如:

$.ajax({
    url: "http://localhost/ny-app/getJSfunction",
    jsonp: "myfunctionName",
    dataType: "jsonp",
    data: soomedata,
    success: function( response ) {
        console.log( response ); // server response
    }
});

在服务器端处理此调用,return 函数封装了 javascript 代码,return 一些数据。 returned javascript 将如下所示:

function myfunctioname(){
     // some code
     return 'whatever you want' ;
}

JQuery ajax 将自动执行 returned javascript 函数。

希望对您有所帮助。

终于可以进行 JSONP 调用了,虽然没有解决我的问题,但是我可以进行调用,所以我将 post 进行更改。
首先,在主控制器中我没有使用@ResponseBody,我把它改成了这样:

@RestController
public class MyController {
    @RequestMapping(value="/myservice/get/{somevar}")
    public MappingJacksonValue getMyObject (@RequestParam String callback, @PathVariable String somevar, HttpServletRequest request, HttpServletResponse response) {
        MyObject obj = new MyObject();
        //some logic
        MappingJacksonValue value = new MappingJacksonValue(obj);
        value.setJsonpFunction(callback);
        return value;
    }
}

注意 return 类型是 MappingJacksonValue(感谢 JSONP with Spring 3.0 and Jackson),javascript 代码是这样的:

$.fn.callWithJsonP = function(somevar) {
    var url = "/myservice/get/" + somevar + "?callback=myCallback";
    $.getJSON(url, function(data) {
        if (data.value.status == "OK") {
            //show the image contained
        }
    });
}

无需定义名为 "myCallback" 的函数。我已经在我的本地机器上测试过,它正在工作。
感谢大家的建议。