我遇到了一些非常奇怪的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;
}
我真的无法弄清楚为什么它会在这个代码工作时抱怨它。
答案 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调用之一生成的?