【问题标题】:Asynchronous Ajax call in SCORM APISCORM API 中的异步 Ajax 调用
【发布时间】:2009-08-07 21:07:20
【问题描述】:

我正在为 SCORM 2004 第 4 版创建一个 javascript API。对于那些不了解 SCORM 的人来说,基本上它是一个 API 标准,电子学习课程可以使用它与 LMS(学习管理系统)进行通信。现在 API 必须有以下方法:

  • 初始化(args)
  • 获取值(键)
  • SetValue(key, value)
  • 终止(args)
  • 提交(参数)
  • GetDiagnostic(args)
  • GetErrorString(args)
  • GetLastError()

现在 Initialize 必须在其他任何事情之前调用,并且 Terminate 必须在最后。 GetValue/SetValue 可以在两者之间的任何地方调用。我正在做的是在 Initialize 方法中,我从 Web 服务获取一些 JSON 并将其存储在 API 中(稍后在使用 GetValue/SetValue 方法时使用)。我遇到的问题是通过 jQuery 的 AJAX 调用是异步的,因此可以在加载 JSON 之前完成 Initialize 方法调用。既然这样,在调用 Initialize 之后调用 GetValue 可能会导致意外问题,因为 GetValue 使用的 JSON 尚不存在。我的问题是:如何确保在调用 GetValue/SetValue 方法之前加载 JSON?我知道简单的答案是使其同步,但大多数情况下不建议这样做,而且它似乎不想为我这样做。这是我的代码:

function GetJSON(){
   var success = false;
   $.ajaxSetup({async:false}); //should make it synchronous
   $.getJSON("http://www.mydomain.com/webservices/scorm.asmx/SCORMInitialize?
              learnerID=34&jsoncallback=?",
             function(data){
                bind(data);
                success = true;
              }
   );   
   return success;
}

function bind(data){
   this.cmi = eval("(" + data.d + ")");
   $.ajaxSetup({async:true});  //should make it asynchronous again
}

有人有什么想法吗?我真的很感激!

【问题讨论】:

    标签: json asynchronous jquery scorm


    【解决方案1】:

    你已经很好地表达了这个问题。在 SCO 调用 Initialize 之后,CMI 数据需要立即可供 SCO 进行后续 GetValue 调用。但是,不建议进行同步 AJAX 调用,如果请求中出现挂断,它可以锁定整个浏览器,直到请求返回或超时。解决方案是在加载 SCO 之前预加载所有需要的数据。在我们的SCORM Engine implementation 中,我们在播放器启动时预加载所有数据(CMI 和排序),然后在学习者完成课程时使用后台进程定期提交脏数据。在处理可能的窗口启动和退出场景的组合时,确保所有数据都正确保存可能会有点棘手,但这当然是可能的。您将希望避免从 SCORM API 调用中向服务器发出任何请求,因为 SCO 通常会用大量调用淹没 LMS。在这些调用中发出服务器请求会严重降低学习者的体验并给服务器带来性能负担。

    迈克

    【讨论】:

      【解决方案2】:

      我们解决此问题的方法是在启动 SCO 时在 API 中对 CMI 数据进行排队。我们首先导航到将 CMI 数据加载到 API 队列中的启动页面,然后启动页面实际启动 SCO。当 SCO 调用 intialize 时,我们只是将数据移动到 CMI 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多