我的网站使用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');
}
})
}
这种情况似乎是一种常见的用例,所以我希望有人可以推荐一种避免此错误的方法。