我目前正在尝试开发一个客户希望通过其学习管理系统跟踪的网络活动。他们的LMS使用AICC标准(HACP绑定),并将实际的学习对象保存在单独的内容库中。
现在我正在努力解决LMS和“课程”之间的沟通类型,因为他们坐在两个不同的服务器上。我可以在课程启动时从URL字符串中检索 sessionId 和 aicc_url ,并且我可以成功将值发布到 aicc_url 在LMS上。
难点在于我无法读取和解析来自LMS的返回响应(格式化为纯文本)。 AICC规定,课程首先将“getParam”命令发送到带有会话ID的aicc_url,以便检索完成状态,来自先前会话的书签信息,用户ID信息等信息,这些都是我需要的。
到目前为止,我尝试了三种不同的方法:
1 - 我开始使用jQuery(1.7)和AJAX,这就是我通常会采用同一服务器实现的方式。这在XMLHttpRequest上返回了“no transport”错误。在一些论坛阅读之后,我尝试确保将ajax调用的crossdomain属性设置为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
希望能帮助其他人尝试解决同样的问题!
答案 0 :(得分:0)
这篇文章中的答案可能会引导您朝着正确的方向前进:
Best Practice: Legitimate Cross-Site Scripting
我认为你在设置PHP“中继”方面走在正确的轨道上。我认为这与其他帖子的答案中的选择#1类似,并且似乎对您在问题中描述的内容最有意义。