2013-12-19 24 views
0

我遇到一些非常怪異的行爲與Ajax。或者這很正常。我不知道。我很喜歡玩Ajax。jQuery ajax代碼裏面的「成功」功能只適用於如果放在第一

我的問題是,我正在進行一些Ajax調用(兩個使用$.post(),另一個使用標準$ajax()調用),並且它們似乎可以很好地返回數據,但成功函數中的代碼只能用於非常奇怪的辦法。

我注意到有些東西如果放在第一行就可以執行;但爲什麼呢?這對我來說確實沒有任何意義。在這種情況下,我希望動態更新id爲link_span的跨度,因爲我的Ajax調用將設備彼此鏈接和取消鏈接。 (correct_classes函數計算鏈接已鏈接的數量,並將其添加到我使用窗口對象創建的link_counter變量中)。
但是,如果跨度只想在相應的代碼放在頂部時更新,那麼它就沒用了。

另一個問題是.ajaxComplete()和其他這樣的事件處理程序並不總是被調用。例如,我嘗試使用.ajaxComplete()在ajax停止時關閉它,以顯示並隱藏加載程序gif。但這隻適用於我的一個電話,這是標準$.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

'on top'您的意思是作爲處理函數中的第一條指令嗎? – Samy

+0

是的。首先要執行......我真的不知道適當的術語 – Ntikki

+0

然後'display_confirmbox()'以任何方式干擾'$('#link_span')'(ajax call maybe?) – Samy

回答

0

我不確定是否理解您的問題....但如果您使用3個異步ajax調用($ .post或$ .ajax是無動於衷$ .post是一個合同語法來調用$ .ajax({type:「post」}))你n等待所有呼叫的完整加載以使用他們的響應。

所以..如果你的其中一個電話evalue window.link_counter你需要等待他的迴應,然後致電你已發佈的代碼。

對於等待完整的負載,您可能會在prev調用的成功函數內召喚呼叫。

你knowlage有$.post()的dataType的屬性,如果你把它設置爲"json"你不需要解析響應因爲jQuery爲你做,這段代碼是沒用的:

resp=JSON.parse(resp); 

和,方法.done()正在調用呼叫是否成功,如果失敗,則$.post()具有成功函數回調。使用它,它更好,並使用.fail()來捕獲通話錯誤。

查看文檔約$。員額():here

但是......有這樣的ID #link_span由Ajax調用的一個產生誰的元素?

+0

所有電話都單獨發生。我修改了我的ajax調用,以使用成功回調而不是.done處理程序,並添加了json數據類型,但問題依然存在。不知何故,jquery對Im試圖做什麼感到惱火,但其餘的代碼工作。 #link_span元素是在最初發生的另一個Ajax調用中生成的。 – Ntikki