ajax - 从 Postman 到 AEM Forms 的 GET 请求正在运行,但由于来自另一个网站的 Ajax 调用的 CORS 而失败
问题描述
我正在使用来自外部网站的以下 Ajax 调用在主机应用程序(外部网站)中嵌入 AEM 表单。Ajax 调用因 CORS 错误而失败。来自 Postman 的相同 GET 请求是成功的。GET 请求发送到基于 CentOS 7 的 AEM Author JEE Instance。
我从另一个 AEM Form 网页执行了相同的 Ajax 调用,并且得到了有效响应。
我确实尽一切可能在 AEM 中启用 CORS,请参阅我遵循的在线文档:
Ajax API 调用:
$.ajax
({
type: "GET",
url: "http://ame_publish:4003/content/forms/af/path_to_aem_form/form_name.html/jcr:content/guideContainer.html",
data: {wcmmode:"disabled", key:"some key values"},
headers: {token:"token value in the header section"},
success: function (prmResults){
console.log('GET Response, prmResults = ', prmResults);
},
error: function(prmErr){console.log("Error:", prmErr);},
fail: function(){console.log("Fail: ", prmErr)}
});
问题:
- 在 AEM 上启用 CORS 我还错过了什么?
- 为什么邮递员工作正常,但如果从另一个网站调用却失败了?
- 返回响应时,它是一个 HTML,其中包含对托管在 AEM Forms 服务器上的资源的引用。此类资源可以是 CSS、JS 和图像。如何将此类资源映射到调用 API 的托管应用程序。如果无法从托管应用程序访问此类资源,则 AEM 表单将被破坏。
我感谢您的帮助。
更新1: 它现在正在工作。检查以下内容:
必须在发布实例中配置 CORS,而不是在作者实例中。
转到 configMgr > Adobe Granite 跨域资源共享策略。在 headers 对象中添加在 Ajax 调用中传递的所需标头项,将其添加到支持的标头中并添加允许的方法(GET、OPTIONS...等)。当然,您必须根据需要允许 Origin。
转到 configMgr > Apache Sling Referrer Filter,然后从 Filter Methods 中删除允许的方法。确保从“过滤方法”中删除允许的方法。确保在这两种情况下都允许使用 OPTIONS 方法。根据需要配置其他部分。
检查上面更新的 Ajax 调用。
如果仍然不起作用,请在记录器部分启用 CORS 的调试。如果您需要帮助,请给我留言。
仍悬而未决:
现在返回的响应是一个完美的 HTML,但所有 URL 引用都是相对的。现在的诀窍是如何使它们对 AEM Server 绝对,或者如何强制 Ajax 调用返回所有 URL 的绝对引用?在 Adobe 的帮助文档中,然后提及一些关于反向代理的内容。还有什么想法吗?
我们考虑过使用 iFrame,但现在的问题是,在表单完成数据输入后,我们需要将控制权传递回宿主应用程序,并将表单数据传递回宿主应用程序。我们需要使用某种回调方法或导航到 URL。但是当使用 iFrame 时,这似乎是不可能的。使用 Ajax,您可以将 HTML 作为内部 HTML 嵌入到宿主应用程序的 DIV 元素中。我们现在尝试解析 HTML 结果,以将 HTML 中的所有 URL 替换为绝对 URL。我只是在想是否还有其他选择。
使用 Ajax HTML 响应并将所有 URL 解析为绝对值后的初始测试到目前为止似乎还存在一些小问题。
塔雷克
解决方案
推荐阅读
- git - git中的“提交引入的更改”是什么意思
- python-3.x - Python:将以秒为单位的时间转换为系列的日期时间
- tinymce - 警告:道具“id”不匹配。在下一个 js 中使用 tinymce
- node.js - 无法在 Windows 10 上安装 harp.js
- ios - 将 UIViewController 从一个 presentingViewController 移动到另一个没有动画
- postgresql - 如何在 PSQL 中实现与 OUTER UNION CORR 类似的结果?
- ghostscript - 手动编辑(每页)Postscript 文件
- css - 在 React Native 中使用固定数字设置高度和宽度是否被认为是不好的做法?
- python - 具有大量意图类的意图分类
- c# - Advertising.IsReady() 在统一广告中始终返回 false