JQuery中模擬image的ajaxPrefilter與ajaxTransport處理

發布時間:2017-03-24 07:49 來源:互聯網 當前欄目:電腦編程入門

   這篇文章主要介紹了JQuery中模擬image的ajaxPrefilter與ajaxTransport處理,本文直接給出模擬實現代碼,代碼中包含詳細注釋,需要的朋友可以參考下

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 ////////////////////////////////////////////////////////////////// // options 是請求的選項 // // originalOptions 值作為提供給Ajax方法未經修改的選項,因此,沒有ajaxSettings設置中的默認值 // // jqXHR 是請求的jqXHR對象 // ////////////////////////////////////////////////////////////////// $.ajaxPrefilter("image", function(options, originalOptions, jqXHR) { //通過預處理器轉化類型 if (options.test) { options.type = 'GET' } //增加前綴 options.url = "http://img.mukewang.com/" + options.url });     /////////////////////// // 請求分發器 transports // /////////////////////// $.ajaxTransport("image", function(s) { if (s.type === "GET" && s.async) { var image; return { send: function(_, callback) { image = new Image(); function done(status) { if (image) { var statusText = (status == 200) ? "success" : "error", tmp = image; image = image.onreadystatechange = image.onerror = image.onload = null; callback(status, statusText, { image: tmp }); } } image.onreadystatechange = image.onload = function() { done(200); }; image.onerror = function() { done(404); }; show(s.url) image.src = s.url; }, abort: function() { if (image) { image = image.onreadystatechange = image.onerror = image.onload = null; } } }; } });     $("#test").click(function(){   //執行一個異步的HTTP(Ajax)的請求。 var ajax = $.ajax({ test : true, //測試 url : '547d5a45000156f406000338-590-330.jpg', dataType : 'image', type : 'POST', data: { foo: ["bar1", "bar2"] }, //這個對象用于設置Ajax相關回調函數的上下文 context: document.body, //請求發送前的回調函數,用來修改請求發送前jqXHR beforeSend: function(xhr) { xhr.overrideMimeType("text/plain; charset=x-user-defined"); show('局部事件beforeSend') }, //請求完成后回調函數 (請求success 和 error之后均調用) complete: function() { show('局部事件complete') }, error: function() { show('局部事件error請求失敗時調用此函數') }, success: function() { show('局部事件success') } })   ajax.done(function() { show('done') }).fail(function() { show('fail') }).always(function() { show('always') })
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、