访问JSONP请求中的响应数据

时间:2016-01-22 10:44:11

标签: ajax cross-domain cors sapui5

我有一个SAP Gateway OData-Service和一个本地Tomcat Apache Server。我的SAPUI5客户端部署在Tomcat中,并从SAP Gateway远程服务器请求OData-Webservice。实际上存在跨域域错误。所以我设置了标题" Access-Control-Allow-Origin"在我的OData-Webservice和我的SAPUI5客户端请求与JSONP,但我会收到一个错误,因为SAP网关无法处理JSONP响应。

我的代码: enter image description here

错误:"未捕获的SyntaxError:意外的令牌:"

错误取决于SAP Gateway与JSONP的不兼容性。

如果我查看网络请求,我会找到这个: enter image description here

这是来自Web服务的JSON(而不是JSONP)响应。

所以我的问题。是否有可能访问此响应? 我试图通过很多回调来访问,比如成功,错误,失败,完成,总是,完成等等。但没有机会......

感谢和最好的问候

2 个答案:

答案 0 :(得分:0)

$.ajax({
   type: 'GET',
    url: url,
    async: false,
    jsonpCallback: 'jsonCallback',
    contentType: "application/json",
    dataType: 'jsonp',
    success: function(response) {
       //this is where you'll get data/response
       console.log(response) ;
   },
    error: function(e) {
       console.log(e.message);
    }
});

更新

问题在于您的上下文..有一些值,如_1453458442107 =:1 enter image description here

检查并encode

答案 1 :(得分:0)

如果在odata响应中设置CORS标头“Access-Control-Allow-Origin”,您应该能够使用常规JSON(不带P)访问该服务。

当CORS-Header不可用时,JSONP是一种绕过相同原始策略的解决方法。

如果您的odata服务使用身份验证,则可能需要设置更多CORS标头以使其正常工作。

On MDN您可以阅读有关CORS及其标题的更多信息。

On Wikipedia是关于CORS与JSONP的章节。

你有没有试过以下这样的东西?

$.get({
    url:"https://.../sap/opu/odata/sap/ZMOBILAD_SRV/UsernameSet?$format=json",
    context: document.body,
    cache: false
    }).done(function(){ 
        console.log(this); 
    });