這是之前在try jQuery做過的例子。
之前我們只能顯示localhost的圖片,現在我們要從server載圖片下來,並顯示之。
接下來來完成我們第一個Ajax程式。
1 2 3 4 5 6 7 8
| $('.confirmation').on('click', 'button', function(){ $.ajax('http://example.org/confirmation.html', { success: function(response) { $('.ticket').html(response).slideDown(); } }); });
|
使用Ajax回傳的網頁並不是完整的網頁,而是只有局部更新。
1 2 3 4 5
| <div> ... <strong>Boarding Pass: </strong> <a href='#' class='view-boarding-pass'>View Boarding Pass</a> <img src='ticket.png' alt='Your boarding pass' class='boarding-pass' /> </div>
|
Aax使用的是相對網址(relative URL)
1 2 3 4 5
| $('.confirmation').on('click', 'button', function(){ $.ajax('confirmation.html', { success: function(response) { $('.ticket').html(response).slideDown(); } }); });
|
跟http://example.org/confirmation.html一樣的效果。
使用$.get減少程式碼
使用$.ajax
1 2 3 4 5
| $.ajax('confirmation.html', { success: function(response) { $('.ticket').html(response).slideDown(); } });
|
使用$.get
1 2 3
| $.get('confirmation.html', function(response) { $('.ticket').html(response).slideDown(); });
|
兩種方法效果完全一樣,用get的寫法比較精簡。格式是$.get(url, success callback)
Sending parameters with requests
有兩種寫法,作用是相等的。
第一種把網址填入url
1 2 3 4
| $.ajax('confirmation.html?confNum=1234', { success: function(response) { $('.ticket').html(response).slideDown(); } });
|
第二種將網址寫在data項目之下
1 2 3 4 5 6 7
| $.ajax('confirmation.html', { success: function(response) { $('.ticket').html(response).slideDown(); }, data: { "confNum": 1234 } } });
|
這兩種方法都是寫死的,正常來說資料是會變動的,所以應該要用以下寫法。
1
| <div class='ticket' data-confNum='1234'>
|
1 2 3 4 5 6 7
| $.ajax('confirmation.html', { success: function(response) { $('.ticket').html(response).slideDown(); }, data: { "confNum": $(".ticket").data("confNum") } });
|
1.6 Ajax Data
原本會顯示全部的圖片,透過修改data對應的url,變成只顯示london這張圖片
我的答案是這樣
1 2 3 4 5 6 7 8 9 10 11
| $(document).ready(function() { $("#tour").on("click", "button", function() { $.ajax('/photos.html', { data: {location:'london'}, success: function(response) { $('.photos').html(response).fadeIn(); }
}); }); });
|
這時候出現了以下的錯誤
因為我把值寫死了,使用data來對應是比較好的作法。
1 2 3 4 5 6 7 8 9 10 11
| $(document).ready(function() { $("#tour").on("click", "button", function() { var el = $("#tour"); $.ajax('/photos.html', { data: {location: el.data('location')}, success: function(response) { $('.photos').html(response).fadeIn(); } }); }); });
|
Ajax options
使用error處理失敗的request
使用beforeSend和Complete製作Loading效果
使用delegation解決錯誤
因為DOM在一進入頁面的時候就載入,所以如果用第一個寫法會發生錯誤,因為根本就還沒有這個物件。
這時候需要delegate,在觸發事件的後面跟著設定一個selector,符合這個selector才會執行。
delegate官方文件
1.8 在.photos內顯示新的<li>
1 2 3 4 5 6
| <div id="tour" data-location="london"> <button>Get Photos</button> <ul class="photos">
</ul> </div>
|
1
| $('.photos').html('<li>There was a problem fetching the latest photos. Please try again.</li>');
|