我有一个 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({
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
检查并编码。
如果您在 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);
});
你如何解决这个问题?我正在尝试这样做,但返回有错误。
$.ajax({
url: url,
jsonp: false,
contentType: "application/json",
dataType: 'jsonp'
}).done(function (data) {
console.log(data);
});
我的调用到达后端,但是返回错误。 未捕获的语法错误:意外的标记 '<' (at ?_=1696032138697:1:1)