我正在尝试对 REST-API 执行 https 请求,以获取稍后将在 HTML 中的选择下拉列表中注入的一些值(id 为 #bannerCategory 的元素)。下面是我的index.html的片段(它本身位于文件夹send-campaign-banner 下-请参阅本问题末尾的项目树):
<script type="text/javascript" src="vendors/postmonger/postmonger.js"></script>
<script type="text/javascript" src="vendors/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="vendors/requirejs/require.js"></script>
<script type="text/javascript">
(function () {
var config = {
baseUrl: '/journeybuilder/send-campaign-banner',
paths: {
js: 'js',
postmonger: 'vendors/postmonger/postmonger',
jquery: 'vendors/jquery/dist/jquery'
},
};
var dependencies = [
'js/sendCampaignBanner',
'vendors/postmonger/postmonger',
'vendors/jquery/dist/jquery'
];
require(config, dependencies);
})();
</script>
<body>
<div id="step1" class="step">
<div class="slds-grid">
<main class="slds-col">
<h4>Journey Banner Sender</h4>
<p class="text-secondary">Please fill in the form below:</p>
<form>
<div class="form-group row">
<label for="bannerCategory" class="col-sm-2 col-form-label">
Banner category
</label>
<div class="col">
<select id="bannerCategory">
<option value="ofertas_descontos">Descontos</option>
<option value="ofertas_sem_juros">Sem Juros</option>
<option value="recomendacoes_especiais">Recomendações</option>
</select>
</div>
</div>
</form>
</main>
</div>
</div>
</body>
每当我尝试通过 XMLHttpRequest 在 index.html 中的脚本标记内执行 HTTP 请求时,我都会收到以下错误:
Access to XMLHttpRequest at 'https://sonaefs-pp.azure-api.net/campaignsmoduleint/v1/api/category/' from origin 'https://sfmc-ca-dev.herokuapp.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
虽然,CORS 应该不是问题,因为我可以通过 Postman 等工具执行请求,因为我需要设置一个自定义标头来授权请求。使用 XMLHttpRequest 时会添加相同的标头,但我想这不是假设的。我想到的唯一解决方案是要求 REST-API 的开发人员在服务器端包含标头。但这不是我喜欢的解决方案,因为我可以使用模块“https”在服务器端 js(azure.js,检查下面的项目树)上执行请求,只要我将相同的标头传递给每个 https 请求.
因此,由于我正在使用 nodejs,我认为这可能是一个异步问题。所以,我有了使用模块 https 并执行异步调用的想法。所以我尝试在加载自定义activity前端的同时加载这个模块,如下图(这里是sendCampaignBanner.js):
define([
'postmonger',
'jquery',
'https'
], function (
Postmonger, $, https
) {
'use strict';
var connection = new Postmonger.Session();
var authTokens = {};
var payload = {};
// When app is rendered, trigger onRender()
$(window).ready(onRender);
不幸的是,我收到以下错误:
require.js:143 Uncaught Error: Script error for "https", needed by: js/sendCampaignBanner
https://requirejs.org/docs/errors.html#scripterror
at makeError (require.js:168)
at HTMLScriptElement.onScriptError (require.js:1738)
此外,为进一步参考检查我的 nodejs 项目树:
│ .gitignore
│ app.js
│ lab.http
│ package-lock.json
│ package.json
│ README.md
│
│
├───icons
├───lib
│ azure.js
│ fuel-auth.js
│ fuel-helpers.js
│ fuel-rest.js
│ jwtDecoder.js
│ sfmc.js
│ utils.js
│
├───public
│ │ custom.css
│ │ index.html
│ │
│ └───activities
│ ├───log-communication-event
│ ├───log-journey-event
│ ├───log-segment-association
│ ├───log-target-control-association
│ ├───send-banners
│ └───send-campaign-banner
│ │ config.json
│ │ index.html
│ │
│ ├───css
│ ├───images
│ └───js
│ sendCampaignBanner.js
│
└───routes
│ activityLogCommunicationEvent.js
│ activityLogJourneyEvent.js
│ activityLogSegmentAssociation.js
│ activityLogTargetControlAssociation.js
│ activitySendBanners.js
│ activitySendCampaignBanner.js
│ activityUtils.js
│ index.js
如果您可能需要更多详细信息,请告诉我,以帮助这个苦苦挣扎的 nodejs 士兵:)
干杯,祝您周末愉快,迪奥戈·佩雷拉。