AJax技术

jQuery基礎教程 · 摘要(4)

字号+ 作者:H5之家 来源:H5之家 2018-03-30 16:08 我要评论( )

三十、如果服務器返回錯誤,那么通過傳遞給錯誤回調函數的 jqXHR 對象的 .status 內容,可以檢測到該錯誤。換句話說,使用 jqXHR.status 的值可以對不同的錯誤給出不同的響應。 然而,服務器錯誤只有你檢測到它的時

三十、如果服務器返回錯誤,那么通過傳遞給錯誤回調函數的 jqXHR 對象的 .status 內容,可以檢測到該錯誤。換句話說,使用 jqXHR.status 的值可以對不同的錯誤給出不同的響應。
然而,服務器錯誤只有你檢測到它的時候才有用。有些錯誤可以立即檢測到,而有些情況則會導致請求到最終錯誤響應之間產生很長的時間延遲。
在沒有既定的服務器端超時機制的情況下,我們可以在客戶端強制設定請求的超時。通過給timeout 選項傳遞一個以毫秒表示的時間值,就相當于告訴 $.ajax(): 如果響應在多長時間內沒有返回,那么就調用它自己的 .abort() 方法。

$.ajax({ url: 'http://book.learningjquery.com/api/', dataType: 'jsonp', data: { title: $('#title').val() }, timeout: 15000, success: response, error: function() { $response.html(failed); } }); // 設置了超時時間后,就可以確保在15秒內,要么正常加載數據,要么用戶能看到一條錯誤消息。

三十一、默認情況下,cookie的值將在會話期間保持,直到關閉瀏覽器標簽頁為止。此外,默認情況下,cookie還是與設置它的頁面關聯的。如果想改變這個默認設置,可以為這個函數提供一個選項對象作為第三個參數。這是jQuery插件乃至jQuery核心函數的典型使用模式。
比如,要想讓cookie在整個站點中都可以訪問到,而且讓它在7天之后再過期,就可以像這樣來調用函數: $.cookie(‘cyclePaused’, ‘y’, {path: ‘/’, expires: 7}) 。

三十二、jQuery內置的某些功能是通過全局函數提供的。所謂全局函數,實際上就是 jQuery 對象的方法,但從實踐的角度上看,它們是位于 jQuery 命名空間內部的函數。核心jQuery庫提供的很多全局函數都是實用方法;所謂實用方法,就是一些常用功能的快捷方式,但即使手工編寫同樣功能的代碼也不是很難。數組處理方法 $.each() 、 $.map() 和 $.grep()都是實用方法。
要向 jQuery 的命名空間中添加一個函數,只需將這個新函數指定為 jQuery 對象的一個內容即可。

(function($) { $.sum = function(array) { //在這里添加代碼 }; })(jQuery);

三十三、擴展全局jQuery對象
事實上,利用 $.extend() 函數,還可以通過另外一種文法來定義全局函數。

(function($) { $.extend({ sum: function(array) { var total = 0; $.each(array, function(index, value) { value = $.trim(value); value = parseFloat(value) || 0; total += value; }); return total; }, average: function(array) { if ($.isArray(array)) { return $.sum(array) / array.length; } return ''; } }); })(jQuery);

這樣調用 $.extend() 就可以給全局jQuery對象添加內容(如果原來有相同的內容,就會替換原來的內容)。

三十四、 使用命名空間隔離函數
我們的插件在jQuery命名空間中創建了兩個獨立的全局函數。但這樣寫有可能污染命名空間。換句話說,其他jQuery插件也可能定義相同的函數名。為了避免沖突,最好的辦法是把屬于一個插件的全局函數都封裝到一個對象中。

(function($) { $.mathUtils = { sum: function(array) { var total = 0; $.each(array, function(index, value) { value = $.trim(value); value = parseFloat(value) || 0; total += value; }); return total; }, average: function(array) { if ($.isArray(array)) { return $.mathUtils.sum(array) / array.length; } return ''; } }; })(jQuery)

這個模式的本質是為所有的全局函數又創建了一個命名空間,叫做 jQuery.mathUtils 。
雖然我們還稱它們為全局函數,但實際上它們已經成了 mathUtils 對象的方法了,而mathUtils 對象則保存在 jQuery 對象的內容中。結果,在調用它們時就必須得加上插件的名字了:

$.mathUtils.sum(sum); $.mathUtils.average(average);

使用這種技術(以及足夠獨特的命名空間),就能夠避免全局函數污染命名空間。

選擇命名空間

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • JAVA AJAX教程第二章-JAVASCRIPT基础知识(2)

    JAVA AJAX教程第二章-JAVASCRIPT基础知识(2)

    2018-03-29 11:00

  • JQuery学习(5-AJAX)

    JQuery学习(5-AJAX)

    2018-03-12 10:10

  • 【JQuery】Ajax

    【JQuery】Ajax

    2018-03-12 08:01

  • JAVA AJAX教程第一章—初识AJAX

    JAVA AJAX教程第一章—初识AJAX

    2018-03-11 11:00

网友点评