2012-01-27 153 views
0

我在这里有一个相当奇怪的场景,希望有人可能有一些洞察力。jQuery AJAX函数奇怪的行为

我有这样的功能:

function get_jsonp(data){ 
    $.ajax({ 
     dataType: 'jsonp', 
     data:data, 
     jsonpCallback:'pr', 
     url:'http://example.com/api/' 
    }); 
//alert("test"); 
} 

$("a").live('click',function(e){ 
    $("#dialog").show(); 
    $(".hideable").hide(); 
    window.location = $(this).attr('href'); 
    info = get_info(); 
    get_jsonp(info,'pr'); 
}); 

下的jQuery 1.4.1这个工程一直很好。

下的jQuery 1.7.1在第一时间其所谓是没有问题的,然后当我点击调用它,我得到任何结果,但如果我取消注释该警报它工作正常

任何想法的项目?

+1

请介绍“点击称之为项目” – David 2012-01-27 18:43:24

+0

我不明白它,你可能已经用'window.location = $(this).attr('href');'当你想要ajax调用来触发页面导航... – bfavaretto 2012-01-27 18:54:08

+0

我只是想设置什么它说在url栏中没有去任何地方 – mcgrailm 2012-01-27 18:58:28

回答

2

只要ajax帖子提交给服务器,如果您使用的是同步请求,该方法就会退出。发生什么事是你的代码在get_jsonp()之后执行之前 ajax调用实际上是完成的。通过使用alert(),您可以在方法退出前添加足够的时间以完成呼叫。

不幸的是,jsonp不支持同步请求。

考虑使用.ajaxComplete()方法,或者,如果你能在get_jsonp方法内执行你的后面的代码,捕捉事件之一:

function get_jsonp(data){ 
    $.ajax({ 
     dataType: 'jsonp', 
     data:data, 
     jsonpCallback:'pr', 
     url:'http://example.com/api/', 
     success: function(){ 
      // Do something when successfully complete. 
     } 
    }); 
} 
+0

哇,我完全读了背。 Woops。谢谢! – asawyer 2012-01-27 18:56:59

+0

o我明白你的意思了,但......这并不能解释为什么它在1.4.1中工作正常,并且无法将jsonpcallback作为从 – mcgrailm 2012-01-27 19:09:01

+0

@mcgrailm运行的地方:这可能只是一个巧合。那个或1.4.1支持同步调用。 – 2012-01-27 19:12:48