我正在尝试通过 SAPUI5 应用程序中的 AJAX 调用访问 SAP Successfactors API。
我可以使用 POSTMAN 很好地访问 API,并提供基本身份验证凭据。
如何直接在 AJAX 中提供这些凭据。我尝试了许多帖子中的多种方法,但似乎没有一种方法有效。
来自 Google 开发工具的响应(控制台选项卡)
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 开发工具(网络选项卡)的响应
Authentication credentials are required. Please provide a valid username, password and company id
Ajax 。
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);
}
});
最佳答案
以下问题可能是问题所在:
1) 发送前的用户名类型是否为:USERNAME@COMPANY:PASSWORD?
2) 端点 URL 应根据您的数据中心,也许 DC2 是正确的,但也可能是 DC12 ? https://api12.successfactors.eu/odata/v2/PerPerson?$select=personId 而不是 https://api2.successfactors.eu/odata/v2/PerPerson?$select=personId
3)传递对成功函数的引用
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 避免跨源问题的正确方法!
SAP CP 中的目标(连接 -> 目标):
不要忘记检查连接并接收 HTTP 状态代码 = 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"
}
在您的 Controller 中
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);
}
});
});
关于ajax - SAPUI5/AJAX,提交基本身份验证详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52167302/