天天看點

ajax的再次封裝!(改進版) —— new與不 new 有啥差別?

  生命不息重構不止!

  上一篇寫了一下我對ajax的再次封裝的方法,收到了很多有價值的回複,比如有童鞋建議用$.extend,一開始還以為要做成插件呢,後來才知道,原來這個東東還可以實作合并。省着自己再去做判斷了。

  還有童鞋說“要不要多加點傳入參數”,這一下提醒我了,ajax有很多參數呀,常用的我考慮進來了,但是還有很多不常用的呢,如果需要的話怎麼辦?在看看我調用原生ajax的方式,kao,完全不支援增加其他參數嗎,這怎麼行,改一定要改。于是就改成了這樣。

  

  雖然還是隻有一個參數,但是這個參數是一個集合。可以包含很多的元素(屬性)。改進後完全以這個參數為主,進行預設的屬性設定,最後直接把這個參數傳遞給原生ajax,這樣調用的時候,可以根據ajax的規則來設定自己需要的屬性了。

  另外去掉了  defaultInfo。因為看來看去,就是一個Nature.sendDataType 算是預設值,其他的都不算了。是以幹脆去掉吧。改進後既可以很友善的調用,也確定了其擴充性,可以增加其他的屬性。

  好像還是要寫不少東東,但是仔細看看的話,可以發現有很多優勢,首先明确了哪些參數用url傳遞,哪些參數用表單post傳遞。error有了統一的處理,蘇測試時success了也可以統一顯示調試資訊。不用去考慮是post還是get是json還是jsonp,這些都會統一處理。

  最後涉及到了一個并發的問題,因為我想實作“複用”,這個函數會被加載到top頁面裡,其他的子頁面都會到top裡調用這個函數,那麼如果同時打開兩個iframe,一起加載,并發了怎麼辦?會不會産生沖突?如果new的話,并發的時候肯定不會産生沖突,但是jQuery的ajax似乎沒有new,那麼他是如何處理并發的呢?

  我是實踐派,遇到問題了首先想到的是寫點代碼測試一下,然後再去找找原理和理論。于是我就寫了個代碼模拟測試一下,看看并發的情況。

大家猜猜輸出結果是啥?