将新数据加载到DOM时如何避免MathJAX Typeset Queue错误

时间:2018-10-24 22:46:56

标签: javascript mathjax

我的网站使用javascript函数将数学标记加载(通过AJAX)到DOM中,然后使用MathJAX呈现。

如果第二次调用该函数(即,将一些新的数学标记加载到DOM元素中):

  • 如果MathJAX在第二个函数调用之前已经完成了其Typeset队列的处理,则一切正常。

  • 如果MathJAX在第二个函数调用之前尚未完成其Typeset队列的处理,则会出现错误。

    MathJax.js?config=TeX-MML-AM_CHTML&latest:19 Uncaught TypeError: Cannot read property 'contains' of null

一旦发生错误,MathJAX就会处于错误状态,直到完全重新加载(例如,通过页面重新加载)后才能运行。

似乎最简单的解决方案是在通过AJAX加载新数学之前清除MathJAX Typeset队列,但我在MathJAX API中找不到清除Typeset队列的方法。

这是我正在使用的功能的简化版本(使用jQuery语法):

window.loadNewMath = function() {
    // I want to clear the MathJAX Typeset queue before making the AJAX call

    $.ajax({
        dataType: "json",
        type: "POST",
        url: "/getNewMath",
        data: [],
        success: function(data) {
            if (data['success']) {
                // load math into DOM
                $("#math-panel").html(data.new_math);
                MathJax.Hub.Queue(["Typeset", MathJax.Hub, 'math-panel']);
            } else {
                $("#math-panel").html('oops. there was a database error');
            }
        },
        error: function(data) {
            $("#math-panel").html('oops. there was an ajax error');
        }
    })
}

这种情况似乎是一种常见的用例,所以我希望有人可以推荐一种避免此错误的方法。

1 个答案:

答案 0 :(得分:0)

从MathJax开发人员处收到的答案:

https://github.com/mathjax/MathJax/issues/2071