【问题标题】:Load file with AJAX and append to使用 AJAX 加载文件并附加到
【发布时间】:2014-05-03 22:34:48
【问题描述】:

在这个测试页面上:

http://sapaacademy.net/working/jQueryAjaxExercises.html

1) 点击第一个按钮<a class="btn_quizTEST" data-exercisename="FL1E1.html">Start Exercise I </a>- 查看第一个加载的文件

2) 点击第二个按钮 <a class="btn_quizTEST" data-exercisename="FL1E2.html">Start Exercise II </a>- 查看第一个文件 覆盖 与第二个

3) 点击第三个按钮<a class="btn_quizTEST" data-exercisename="SL1E3.html">Start Exercise III </a>--查看所有之前加载的文件覆盖

我知道这是因为:

   $.ajax({
    // code...
 success:function(result){
      $('.exspace').html(result); <-- overrides all other loaded files
    }});

如何防止覆盖并将文件附加到相应的字段?

FL1E1.html 应该只加载到它对应的 div 中

FL1E2.html 应该加载到它对应的 div 中

SL1E3.html 应该加载到它对应的 div 中

任何建议将不胜感激

  <script> </script> is in the DOM

【问题讨论】:

    标签: jquery ajax append


    【解决方案1】:

    你不把html()改成append()吗?

    var self = this;
    
    $.ajax({
        // code...
       success:function(result){
           $(self).closest('.exBtnWrap').find('.exspace').append(result);
       }
    });
    

    【讨论】:

    • 刚改成.append()。查看新行为。还是错了。因为脚本会遍历并选择所有 $('.exspace') DIV。 :(
    • @AndreyDoronin - 当然可以,你想定位什么元素,因为你没有添加任何标记,所以不是很清楚。我编辑了答案以尝试给出一个非常通用的解决方案。
    • 对于按钮 1,我有文件 1,对于按钮 2 - 文件 2,对于按钮 3 - 文件 3。但所有按钮都有相同的 $('.exspace') DIV,文件加载到其中。我需要以某种方式遍历并定位相应的 $('.expsace') 而不会影响其他人。
    • @AndreyDoronin - 是的,这正是你需要做的,但如果没有看到标记,就不可能告诉你如何去做,你必须弄清楚。你试过上面的代码吗?
    • 是的!有用!谢谢!我在您编辑后尝试了代码。但我精确​​地尝试了 (closest()+find()),但它没有用...我有 --> ` var visibleExField = $(this).closest('.exBtnWrap').find('.exspace' ); visibleExField.closest('.exBtnWrap').find('.exspace').append(result);`
    【解决方案2】:

    像这样为每个 div 创建 id 和代码 ajax,

    function loadFile(id){
    $.ajax({
    // code...
    success:function(result){
      $('#'+id).html(result); <-- overrides all other loaded files
    }});
    }
    
    <a class="btn_quizTEST" data-exercisename="FL1E1.html" id="file1"    
          onclick="loadFile(this.id)">Start Exercise I </a>
    

    【讨论】:

    • 谢谢,我试图弄清楚如何正确遍历上面的 adeneo。带ID的解决方案也一定不错,但是上面的遍历解决方案需要较少的标记(给ID)。干杯!
    【解决方案3】:

    当我看到您的页面时,您有一个 setTimeout() 方法,该方法具有 jQuery 的 .slideDown() 方法,因此您可以在 .slideDown() 的回调函数中进行 ajax 调用:

    var $this = $(this);
    
    setTimeout(function () {
        $('.exspace').slideDown('fast', function(){
              $.ajax({
                 // code...
              success:function(result){
                    $this.closest('.exBtnWrap').find('.exspace').html(result);
              }});
        });
    }, 500);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-12
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多