【问题标题】:Mathjax doesn't typeset equations after ajax callMathjax 在 ajax 调用后不排版方程
【发布时间】:2015-07-05 01:57:40
【问题描述】:

我正在使用 MathJax 在我的网页上排版方程式。第一次加载网页时一切正常。单击“NEXT”按钮时,div 内的方程式发生变化(ajax 调用),但它显示为“raw TEX”,即 Mathjax 没有第二次排版它。相关代码如下:

标记和脚本

<div class="div_body" id="ques_dashboard">
  <p>When $a \ne 0$, there are two solutions to \(ax^2 + bx + c = 0\) and they are $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$</p>
</div>                          
<div class="div_footer">
   <a href="#" class="button ryt_btn" id="answer_submit">SUBMIT</a>
   <a href="#" class="button ryt_btn" id="next_q">NEXT</a>
   <a href="#" class="button ryt_btn" id="skip_q">SKIP</a>
</div>
<script>
   $(document).ready(function(){
     $('#next_q').click(function(){
        $("#next_q").hide();
        $('#answer_submit').show();
        $("#skip_q").show();        

        $.ajax({
            type: 'POST',  
            url: '../ajax/next_question.php',                
            //data:{queslist:queslist, current_qorder:current_qorder},                
            success: function(msg){                        
                $('#ques_dashboard').html(msg);
          MathJax.Hub.Queue(["Typeset",MathJax.Hub,'ques_dashboard']);
            }
        });           
        return false;
     }); 
   });
</script>

由 AJAX 调用的 PHP

<?php?>
<p> If \\(a, b, c\\) are in HP, then \\(\\frac {1}{a}, \\frac {1}{b}, \\frac {1}{c}\\) are in AP</p>

我在这里展示了简化的代码,其中包括大量的 php 和 mysql。我成功地展示了“下一个问题”,但无法使用 Mathjax 进行排版。我尝试过使用MathJax.Hub.Queue 函数。

我是 jquery 和 ajax 的新手。请帮忙。

【问题讨论】:

    标签: javascript jquery ajax mathjax


    【解决方案1】:

    问题是您需要转义'\' 字符,否则它们会被jquery 和底层javascript 解释。所以返回的字符串应该是这样的:

    <?php?>
    <p> If \\(a, b, c\\) are in HP, then \\(\\frac {1}{a}, \\frac {1}{b}, \\frac {1}{c}\\) are in AP</p>
    

    【讨论】:

    • 很高兴你指出了这一点。我再次编辑了这个问题。由于这是简化的示例,我忘记了这一点。在我的实际代码中,我在json_decode 之前使用str_replace('\\','\\\\', $queslist) 来处理您指出的问题($queslist 是Ajax 从第一页发送到第二页的json_encode)。很抱歉造成混乱。
    • 那么问题似乎出在您的代码中的其他地方,因为您在此处显示的内容应该可以工作。请参阅工作 jsfiddle jsfiddle.net/9L5xc04e/2。也许在您的 MathJax 配置中有一些东西?还是 MathJax 队列中阻止了这个调用的东西?
    • 我刚刚检查了我的 Mathjax 配置。它被配置为在排版完成之前隐藏文本。评论那部分解决了这个问题。感谢您的帮助。
    • 只是出于好奇,知道如何在不关闭“隐藏直到排版完成”功能的情况下解决问题吗?
    • 你确定你的函数没有抛出任何错误。它的样子是因为它没有退出队列。如果函数运行正确,它不应该阻塞队列。
    【解决方案2】:

    Julien 的帮助下,我能够找到问题所在。下面给出的代码 sn-p 在 ajax 调用后干扰了排版。(此队列功能隐藏文本,直到排版完成。)

    MathJax.Hub.Queue(function () { document.getElementById("hide_page").style.visibility = "";});

    评论这部分解决了问题。

    如果我找到一种同时使用 ajax 和“隐藏直到排版”功能的方法,将更新答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      相关资源
      最近更新 更多