2012-01-27 138 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