首页 > 解决方案 > 从 Postman 到 AEM Forms 的 GET 请求正在运行,但由于来自另一个网站的 Ajax 调用的 CORS 而失败

问题描述

我正在使用来自外部网站的以下 Ajax 调用在主机应用程序(外部网站)中嵌入 AEM 表单。Ajax 调用因 CORS 错误而失败。来自 Postman 的相同 GET 请求是成功的。GET 请求发送到基于 CentOS 7 的 AEM Author JEE Instance。

我从另一个 AEM Form 网页执行了相同的 Ajax 调用,并且得到了有效响应。

我确实尽一切可能在 AEM 中启用 CORS,请参阅我遵循的在线文档:

https://docs.adobe.com/content/help/en/experience-manager-65/forms/adaptive-forms-basic-authoring/embed-adaptive-form-external-web-page.html

https://docs.adobe.com/content/help/en/experience-manager-learn/foundation/security/develop-for-cross-origin-resource-sharing.html

https://docs.adobe.com/content/help/en/experience-manager-learn/foundation/security/understand-cross-origin-resource-sharing.html

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)}
    });

问题:

我感谢您的帮助。


更新1: 它现在正在工作。检查以下内容:

  1. 必须在发布实例中配置 CORS,而不是在作者实例中。

  2. 转到 configMgr > Adob​​e Granite 跨域资源共享策略。在 headers 对象中添加在 Ajax 调用中传递的所需标头项,将其添加到支持的标头中并添加允许的方法(GET、OPTIONS...等)。当然,您必须根据需要允许 Origin。

  3. 转到 configMgr > Apache Sling Referrer Filter,然后从 Filter Methods 中删除允许的方法。确保从“过滤方法”中删除允许的方法。确保在这两种情况下都允许使用 OPTIONS 方法。根据需要配置其他部分。

  4. 检查上面更新的 Ajax 调用。

如果仍然不起作用,请在记录器部分启用 CORS 的调试。如果您需要帮助,请给我留言。

仍悬而未决:

现在返回的响应是一个完美的 HTML,但所有 URL 引用都是相对的。现在的诀窍是如何使它们对 AEM Server 绝对,或者如何强制 Ajax 调用返回所有 URL 的绝对引用?在 Adob​​e 的帮助文档中,然后提及一些关于反向代理的内容。还有什么想法吗?

我们考虑过使用 iFrame,但现在的问题是,在表单完成数据输入后,我们需要将控制权传递回宿主应用程序,并将表单数据传递回宿主应用程序。我们需要使用某种回调方法或导航到 URL。但是当使用 iFrame 时,这似乎是不可能的。使用 Ajax,您可以将 HTML 作为内部 HTML 嵌入到宿主应用程序的 DIV 元素中。我们现在尝试解析 HTML 结果,以将 HTML 中的所有 URL 替换为绝对 URL。我只是在想是否还有其他选择。

使用 Ajax HTML 响应并将所有 URL 解析为绝对值后的初始测试到目前为止似乎还存在一些小问题。

塔雷克

标签: ajaxcorsaem

解决方案


推荐阅读