“成功”函数中的jQuery ajax代码仅在首先放置时才有效

时间:2013-12-19 13:02:04

标签: javascript ajax jquery

我遇到了一些非常奇怪的Ajax行为。或许这很正常。我不知道。我很想玩Ajax。

我的问题是我正在进行一些Ajax调用(两个使用$.post(),一个使用标准$ajax()调用),他们似乎返回数据很好,但代码内部成功功能只能以一种非常特殊的方式运作。

我注意到有些东西如果排在第一位就行了;但为什么呢?这对我来说真的没有任何意义。在这种情况下,我希望动态更新带有id link_span的span,因为我的Ajax调用链接和取消链接设备。 (correct_classes函数计算已链接的链接数,并将其添加到我使用window对象创建的全局link_counter变量中。)
但是因为如果相应的代码放在顶部,跨度只想更新,它就没用了。

另一个问题是.ajaxComplete()和其他此类事件处理程序并不总是被调用。例如,我试图通过使用.ajaxComplete()来显示和隐藏加载程序gif,以便在ajax停止时关闭它。但这仅适用于我的一个呼叫,即标准$.ajax呼叫。

我真的很困惑。

任何帮助都会很棒,请让我澄清是否有一些我还不够清楚的事情。

以下是我正在谈论的一小段内容:

$.post( "<?php echo base_url(); ?>connections/ajax_link", datax).done(function( resp,status ) {

    $("#loader_overlay").css('display','none');
    display_confirmbox(); 
    resp=JSON.parse(resp);

    var str = resp['parent_selector'];
    var arr = mystr.toString().split("||");
    correct_classes(arr[1], resp);

    $( '#link_span' ).text( '( ' + window.link_counter + ' ) links found' ); //this doesnt work unless its on top
});

更新

问题似乎是由correct_classes()引起的; 来自ajax调用的数组被传递给jQuery抱怨某事的函数,并导致其余的ajax代码停止。然而correct_classes()内的所有内容都被执行了。有问题的错误是:

TypeError: invalid 'in' operand e

具体是什么导致问题似乎是这个(我评论了其他一切,这是:

  $.each( val, function( i, value ) {
    var mystr = value;
  }

我真的无法弄清楚为什么它会在这个代码工作时抱怨它。

1 个答案:

答案 0 :(得分:0)

我不确定是否理解你的问题....但是如果你使用3异步ajax调用($ .post或$ .ajax是无关紧要的。.post是一种合约语法来调用$ .ajax({type :“post”}))你需要等待所有呼叫的完全加载才能使用他们的响应。

所以..如果您的一个电话评估 window.link_counter ,您需要等待他的回复才能调用您发布的代码。

等待完整的负载你可以在prev呼叫的成功功能内呼叫。

如果您知道有$.post() dataType 的属性,如果将其设置为"json",则无需解析响应,因为Jquery会为您执行此操作,此代码没用:

resp=JSON.parse(resp);

并且,方法.done()正在调用如果调用失败,调用是否成功,$.post()具有成功函数回调。使用它,它会更好,并使用.fail()来捕获调用错误。

请参阅有关$ .post()的文档:here

但是......具有此标识#link_span的元素是由ajax调用之一生成的?