访问 JSONP 请求中的响应数据

问题描述 投票:0回答:3

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

我的代码:

错误:“未捕获的语法错误:意外的标记:”

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

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

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

所以我的问题。是否有可能访问此回复? 我尝试通过很多回调进行访问,例如成功、错误、失败、完成、始终、完成等。但没有机会...

谢谢并致以诚挚的问候

ajax cross-domain cors sapui5
3个回答
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

检查并编码


0
投票

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

JSONP 是一种在 CORS 标头不可用时规避同源策略的解决方法。

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

在 MDN 上,您可以阅读有关 CORS 及其标头的更多信息。

维基百科有一章是关于 CORS 与 JSONP 的。

那么您尝试过类似以下的方法吗?

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

0
投票

你如何解决这个问题?我正在尝试这样做,但返回有错误。

 $.ajax({
         url: url,
         jsonp: false,
         contentType: "application/json",
          dataType: 'jsonp'
}).done(function (data) {
  console.log(data);
});

我的调用到达后端,但是返回错误。 未捕获的语法错误:意外的标记 '<' (at ?_=1696032138697:1:1)

© www.soinside.com 2019 - 2024. All rights reserved.