【问题标题】:jquery ajax post callback - manipulation stops after the "third" calljquery ajax post callback - 在“第三次”调用后停止操作
【发布时间】:2009-08-11 18:42:00
【问题描述】:

编辑:问题与 Boxy 无关,我在使用 JQuery 的加载方法时遇到了同样的问题。

编辑 2:当我从 ajax 回调中取出 link.remove() 并将其放在 ajax 加载之前,问题就不再存在了。在 ajax 回调函数中操作元素是否有限制。

我正在使用带有 Boxy 插件的 JQuery。

当点击页面上的“标志”链接时,会弹出一个 Boxy 模式并通过 ajax 加载一个表单。当用户提交表单时,链接(<a> 标记)被删除,并从 ajax 响应中创建一个新链接。这种机制适用于 3 次!第三次之后,回调函数只是不删除/替换/附加(测试了几种操作变体)元素。

我唯一的提示是,在第三次调用之后,链接的父级变得不可选择。但是,我对此无能为力。

对不起,如果这是一个非常琐碎的问题,我没有客户端编程经验。

相关的html如下:

<div class="flag-link">
    <img class="flag-img" style="width: 16px; visibility: hidden;" src="/static/images/flag.png" alt=""/>
    <a class="unflagged" href="/i/flag/showform/9/1/?next=/users/1/ozgurisil">Flag</a>
</div>

这里是相关的js代码:

$(document).ready(function() {

    $('div.flag-link a.unflagged').live('click', function(e){   
        doFlag(e);
        return false;
    }); 
...

});


function doFlag(e) {
   var link = $(e.target);
   var url = link.attr('href');

   Boxy.load(url, {title:'Inappropriate Content', unloadOnHide:true, cache:false, behaviours: function(r) {
    $("#flag-form").live("submit", function(){

        var post_url = $("#flag-form").attr('action');
        boxy = Boxy.get(this);
        boxy.hideAndUnload();
        $.post(post_url, $("#flag-form").serialize(), function(data){

            par = link.parent();                
            par.append(data);
            alert (par.attr('class')); //BECOMES UNDEFINED AT THE 3RD CALL!!
            par.children('img.flag-img').css('visibility', 'visible');
            link.remove();                                              
        });

        return false;
        }); 
    }});

}

【问题讨论】:

  • 为什么要删除/替换链接?你不能只更新链接的href和类属性吗?这样做会更安全。
  • 我会尝试提供一个演示。在我遇到这个问题之前,更换链接是没有问题的。这是我第一次尝试在 ajax 回调函数中替换元素。顺便说一句,我最近做了一个编辑。
  • 关于您的编辑,您必须调试以查看文档中的实际情况,插入/删除的内容(例如,不清楚回调中包含哪些数据)。
  • 浏览器在第 3 次重复后停止执行它已完成的操作。我调试了代码(太多次),我可以说响应数据绝对符合我的预期。也不会通过执行引发异常。简而言之,一切似乎都很好。
  • 顺便说一下,我更改了代码,以便更新链接的 href 和 class。它完美无缺。

标签: jquery-plugins jquery


【解决方案1】:

旧的和迟到的回复,但是..我在谷歌搜索我的答案时发现了这个,所以.. :)

我认为这是引发“未修改”错误的问题,因为您返回相同的 Ajax 数据。

即使“ifModified”选项设置为 false(这也是默认值),似乎也会发生这种情况。

三次返回相同的 Ajax 数据会给我带来问题(jQuery 1.4)。使数据唯一(只需在响应中添加时间/随机数)即可解决问题。

我不知道这是浏览器 (Firefox)、jQuery 还是服务器 (Apache) 的问题..

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题,我调用 boxy 后无法运行 javascript。所以我把我所有的 javascript 代码都放在了 afterShow:function 中,这是一个四四方方的属性。除了提交表单外,我几乎可以运行。我的方式可以给你一些东西。

    【讨论】:

      猜你喜欢
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多