Ajax需要再单击一次才能加载

时间:2012-10-05 10:30:06

标签: javascript jquery ajax asynchronous

我遇到了AJAX和Jquery的问题 经过几个小时的研究,我最后在这里发帖。

您可以看到我的问题directly on my (nonfinished) website

当你到达页面时,Accueil上没有任何内容(这是正常的)

尝试1

点击Project =>

  • 触发标题(正常)

  • 发送Ajax请求以将项目页面加载到主div(正常)

  • ('li')没有开始SlideDown(除非我第二次点击Project

尝试2

转到提案 => (一切正常)再次转到项目 =>

  • 触发一切!

代码

以下是用于触发项目滑动的代码:

$('li').livequery(function(){

    var lis = $('#project-container ul').find('li');
    $(lis).each(function(index) {
        var li = $(this);

        setTimeout(function() {
            li.slideDown(400);
        }, 300 * index);
    }); 
});

我认为这与this question

的问题相同

它必须是一个回调故事,其中var没有正确存储或其他东西 但遗憾的是我无法使用我的页面。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:0)

确保在加载页面后运行此代码。当我在90%的情况下遇到这种问题时,这就是原因。

答案 1 :(得分:0)

我不是实时查询的忠实粉丝(我没有看到使用默认.on()方法的任何优势。(delegated ofc)。

对我来说,这似乎是一个过时的库:)

另一个暗示。使用参数调用正确的方法,以全局定义东西。如果你像这样定义全局的东西,那么你将会忽略变化的内容。

使用tripple equal ===!==进行比较。而不是==它将避免意外的误报。

function GoToLink () { if (WrapLink == 1) {中你比较一个表示可以调用js函数的url的字符串和1.为什么?

为什么不在改变window.location时调用ajax方法?

为什么你需要一个额外的ajax库,因为你使用jquery就可以使用jquery's default ajax implemention

$.ajax({
   type: "POST",
   url: "some.php",
   data: "name=John&location=Boston",
   success: function(msg){
     alert( "Data Saved: " + msg );
   }
 });

让您走上正确轨道的几个想法

更新:

documentation中描述了on方法的使用,你应该使用它委托,这意味着你将它应用于父容器并给孩子一个。

$(' ul')。on('点击',' li',function(){    //做一点事 });

我在没有通过活动的情况下忽略了功能。

$('li').livequery(function () {
    var lis = $('#project-container ul').find('li');
    $(lis).each(function (index) {
        var li = $(this);

        setTimeout(function () {
            li.slideDown(400);
        }, 300 * index);
    });
});

这里最简单的方法是使用方法并在添加列表项时调用它。

 function slideDownListitems($lis){
     $lis.each(function (i) {  
        setTimeout(function () {
            $(this).slideDown(400);
        }, 300 * i);
    });
 }
 //when a listitem is added call
 slideDownListitems( $('#project-container ul li') );

一周的好工作JS!我稍后会更深入地研究其余内容并给你一个更新(现在正在工作)grtz