问题描述
我正在尝试通过 SAPUI5 应用程序中的 AJAX 调用访问 SAP Successfactors API.
I'm trying to access a SAP Successfactors API from an AJAX Call in a SAPUI5 application.
我可以使用 POSTMAN 访问 API,并提供基本身份验证凭据.
I can access the API fine using POSTMAN, and providing the Basic Authentication credentials.
我如何直接在 AJAX 中提供这些凭据.我从无数帖子中尝试了多种方法,但似乎没有任何方法有效.
How do I supply these credentials directly in AJAX. I've tried numerous ways from numerous post but no method seems to work.
来自 Google Dev Tools(控制台选项卡)的响应
Response from Google Dev Tools (Console Tab)
Failed to load https://api2.successfactors.eu/odata/v2/PerPerson?$select=personId: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://webidetesting#####-#####.dispatcher.hana.ondemand.com' is therefore not allowed access.
来自 Google Dev Tools 的响应(网络标签)
Response from Google Dev Tools (Network Tab)
Authentication credentials are required. Please provide a valid username, password and company id
阿贾克斯.
var aData = jQuery.ajax({
type: "GET",
contentType: "application/json",
crossDomain: true,
url: "https://api2.successfactors.eu/odata/v2/PerPerson?$select=personId",
xhrFields: {
withCredentials: true
},
beforeSend: function (req) {
req.setRequestHeader('Authorization', 'Basic ' + btoa('Username:Password'));
req.setRequestHeader('Access-Control-Allow-Origin', '*');
},
headers: {
"Authorization": "Basic " + btoa("Username" + ":" + "Password"),
"Access-Control-Allow-Origin": "*"
},
username: "Username",
password: "Password",
dataType: "json",
async: false,
success: function (data, textStatus, jqXHR) {
oModel.setData({
modelData: data
});
alert("success to post");
},
error: function (oError) {
console.log(oError);
}
});
推荐答案
以下问题可能是问题所在:
The following issues might be the problem:
1) 发送前用户名类型是否为:USERNAME@COMPANY:PASSWORD?
1) Is Username of Type: USERNAME@COMPANY:PASSWORD before sent?
2) 端点 URL 应该根据您的数据中心,也许 DC2 是正确的,但也可能是 DC12 ?https://api12.successfactors.eu/odata/v2/PerPerson?$select=personId 而不是 https://api2.successfactors.eu/odata/v2/PerPerson?$select=personId
2) Endpoint URL should be according to your data center, maybe DC2 is correct, but could also be DC12 ? https://api12.successfactors.eu/odata/v2/PerPerson?$select=personId instead of https://api2.successfactors.eu/odata/v2/PerPerson?$select=personId
3) 传递对成功函数的引用
3) Pass a reference to your success function
var that = this;
....
success: function (data, textStatus, jqXHR) {
var oModel = that.getView().getModel(); // get your model, instatiated outside this method
oModel.setData({
modelData: data
});
alert("success to post");
},
error: function (oError) {
console.log(oError);
}
....
4) 使用 SAP Cloud Platform 避免跨域问题的正确方法!
4) Working with SAP Cloud Platform the right way to avoid cross-origin problems!
目标(连接 -> 目标):
Destination (Connectivity -> Destinations) in SAP CP:
不要忘记检查连接并接收 HTTP 状态代码 = 200!
Don't forget to check the connection and receive HTTP status code = 200!
Name: sap_hcmcloud_core_odata,
Type: HTTP
URL: https://api12preview.sapsf.eu
Auth: Internet, Basic Authentication
Your User (Username@Company),
Your Password
Properties
WebIDEEnabled = true
WebIDESystem = SFSF
WebIDEUsage = odata_gen
neo-app.json 添加路由:
{ "path": "/sf-dest",
"target": {
"type": "destination",
"name": "sap_hcmcloud_core_odata"
},
"description": "SFSF Connection"
}
在您的控制器
sap.ui.define([
"sap/ui/core/mvc/Controller"], function (Controller) {
"use strict";
return Controller.extend("yourNamespace.yourAppName.controller.Main", {
onInit: function () {
var oModel = new sap.ui.model.json.JSONModel();
var sHeaders = {
"Content-Type": "application/json",
"Accept": "application/json",
};
//sending request
oModel.loadData("/sf-dest/odata/v2/PerPerson?$select=personId", null, true, "GET", null, false, sHeaders);
console.log(oModel);
}
});
});
这篇关于SAPUI5/AJAX,提交基本认证细节的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!