0

我目前正在尝试开发一个客户希望通过他们的学习管理系统跟踪的网络活动。他们的 LMS 使用 AICC 标准(HACP 绑定),并将实际的学习对象保存在单独的内容存储库中。

现在我正在努力解决 LMS 和“课程”之间的通信类型,因为它们位于两个不同的服务器上。当课程启动时,我能够从 URL 字符串中检索sessionIdaicc_url ,并且我可以成功地将值发布到 LMS 上的aicc_url

困难在于我无法读取和解析来自 LMS 的返回响应(格式为纯文本)。AICC 规定,课程首先向带有会话 ID 的 aicc_url 发布“getParam”命令,以便检索完成状态、以前会话的书签信息、用户 ID 信息等信息,这些都是我需要的。

到目前为止,我已经尝试了三种不同的方法:

1 -我从使用 jQuery (1.7) 和 AJAX 开始,这就是我通常会使用相同服务器实现的方式。这在 XMLHttpRequest 上返回了“无传输”错误。在阅读了一些论坛之后,我尝试确保将 ajax 调用的跨域属性设置为 true,以及在 ajax 调用上方插入$.support.cors = true的建议,但这些都没有帮助。

2 & 3 -我尝试使用 oldschool 框架集,底部框架中有一个表单,该表单将使用 LMS 返回的文本提交和刷新,然后通过 javascript 读取;然后是使用 iFrame 作为实际表单的目标并使用 onload 处理程序读取和解析内容的变体。这两种方法都在同一个服务器环境中工作,但在跨域环境中失败。

有人告诉我,所有其他课程都脱离了内容存储库书签以及跟踪完成情况,因此显然可以以某种方式从 LMS 读取返回值;AICC 经常被宣传为在跨服务器场景中工作,所以我认为在我忽略的 AICC 结构中必须有一种常用的方法来执行此操作。到目前为止,我的论坛搜索还没有发现任何让我走得更远的东西,所以如果有人在跨域 AICC 实现方面有任何经验,我当然可以使用建议!

我剩下的唯一想法是尝试在与课程相同的服务器上设置 PHP“中继”表单,并让前端页面向其发送值,然后使用 PHP 将这些值提交到 LMS,然后中继从 LMS 到前端 iframe 或 ajax 调用的返回文本,以便将其视为在同一个域中......我不确定是否有一种方法可以在不进入服务器端的情况下解决问题。AICC 内部似乎必须有一个共同的解决方案。

提前致谢!

编辑和更新: 对于遇到类似问题的任何人,我找到了一些可能有助于解释问题的资源以及一些替代解决方案。

第一个特定于 Plateau,它是 LMS 行业的大玩家,已被 Successfactors 收购。这是一些关于设置代理以处理跨域内容的文档: http ://content.plateausystems.com/ContentIntegration/content/support_files/Cross-domain_Proxlet_Installation.pdf

我发现的第二个是 Successfactors 的幻灯片演示,它强调了跨域内容的挑战,并说明了解决它的后端想法;包括使用反向代理。相关部分从幻灯片 21-22(PDF 中的第 11 页)开始。 http://www.successfactors.com/static/docs/successconnect/sf/successfactors-content-integration-turley.pdf

希望能帮助其他试图解决同样问题的人!

4

1 回答 1

0

这篇文章中的答案可能会引导您朝着正确的方向前进:

最佳实践:合法的跨站脚本

我认为您在设置 PHP“中继”方面走在了正确的轨道上。我认为这与另一篇文章的答案中的选择#1 类似,并且似乎与您在问题中描述的内容最有意义。

于 2013-03-14T21:02:02.453 回答