跨域 CORS 協議ajax
爲何使用cors
,不使用jsonp
?由於cors
更強大,方便安全,還不須要修改大量的先後端數據格式,只需修改服務器配置參數,與請求參數。json
想要跨域獲取數據與資源,必須由對方服務器開啓 CORS 協議,經過認證或公開獲取數據與資源。canvas
ajax
跨域請求時,須要手動開啓,跨區請求參數:crossDomain: true
後端
$.ajax({ beforeSend : function (xhr) { }, error : function () { }, crossDomain: true, method : "GET", url : URL, dataType : "json", timeout : 3000 })
實例與經常使用類型轉換跨域
主要思路:首先經過Image
對象下載圖片,而後經過canvas
對象,轉換成須要的類型,最後進行保存。安全
==跨域獲取的重要參數==:crossOrigin= "anonymous"
,下面是實例:服務器
var img = new Image(); img.src = url; // 跨域重點參數 img.crossOrigin = "Anonymous"; img.onload = function () { // 壓縮質量能夠根據實際狀況調整 var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); // 設置 canvas 的寬度和高度 canvas.width = this.width; canvas.height = this.height; // 把圖片繪製到 canvas 中 ctx.drawImage(img, 0, 0, canvas.width, canvas.height); // 取出 Blob 格式數據, 併發送 canvas.toBlob(function (blod) { var fd = new FormData(); fd.append('key',blod); var request = new XMLHttpRequest(); request.open("POST", URL); request.send(fd); },'image/jpeg'); };
基本經常使用轉變方法整理併發
經過 url
路徑,返回image
對象app
function UrlToImage (url,fn){ var img = new Image(); img.src = url; img.onload = function(){ fn(img); } };
將image
對象轉變爲canvas
類型cors
function ImageToCanvas(image){ var cvs = document.createElement("canvas"); var ctx = cvs.getContext('2d'); cvs.width = image.width; cvs.height = image.height; ctx.drawImage(image, 0, 0, cvs.width, cvs.height); return cvs ; };
將canvas
對象轉變爲blob
類型對象,blob()
方法很是強大。
function CanvasResizeToFile(canvas,quality,fn){ canvas.toBlob(function(blob) { fn(blob); },'image/jpeg',quality); };
File
接口基於 Blob
,繼承了 Blob
的功能並將其擴展使其支持用戶系統上的文件。咱們能夠把它當作File
類型對待,其餘更具體的用法能夠參考MDN文檔將canvas
對象轉變爲dataUrl
字符串
function CanvasResizeToDataURL(canvas,quality){ return canvas.toDataURL('image/jpeg',quality); };
將flie(blob)
類型轉變爲dataUrl
字符串
function FileToDataURL(file,fn){ var reader = new FileReader(); reader.onloadend = function(e){ fn(e.target.result); }; reader.readAsDataURL(file); };
將dataUrl
字符串轉變爲image
類型對象
function DataUrlToImage(dataurl,fn){ var img = new Image(); img.onload = function() { fn(img); }; img.src = dataurl; };
將dataUrl
字符串轉變爲blob
類型對象
function DataUrlToFile(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while(n--){ u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], {type:mime}); };
數據上傳與保存
使用FormData
方法包裝數據,支持blob
類型,File
接口基於 Blob
。
var fd = new FormData(); fd.append('indexKey',blod);
使用xhr
上傳
var request = new XMLHttpRequest(); request.open("POST", Url); request.send(fd);