1.JSONP原理
ajax請(qǐng)求受同源策略影響驰凛,不允許進(jìn)行跨域請(qǐng)求,而script標(biāo)簽src屬性中的鏈接卻可以訪問跨域的js腳本担扑,利用這個(gè)特性恰响,服務(wù)端不再返回JSON格式的數(shù)據(jù),而是返回一段調(diào)用某個(gè)函數(shù)的js代碼涌献,在src中進(jìn)行了調(diào)用胚宦,這樣實(shí)現(xiàn)了跨域。
同源策略:是一種約定,它是瀏覽器最核心也最基本的安全功能枢劝,如果缺少了同源策略井联,則瀏覽器的正常功能可能都會(huì)受到影響∧裕可以說Web是構(gòu)建在同源策略基礎(chǔ)之上的烙常,瀏覽器只是針對(duì)同源策略的一種實(shí)現(xiàn)。同源策略被冒,它是由Netscape提出的一個(gè)著名的安全策略【啵現(xiàn)在所有支持JavaScript 的瀏覽器都會(huì)使用這個(gè)策略。所謂同源是指昨悼,域名蝗锥,協(xié)議,端口相同率触。
2.ajax同步和異步
xmlHttp.open(method, url,async);
async:布爾值终议,用來說明請(qǐng)求是否為異步模式。async是很重要的葱蝗,因?yàn)樗怯脕砜刂?a target="_blank" rel="nofollow">JavaScript如何執(zhí)行該請(qǐng)求穴张。
當(dāng)設(shè)置為true時(shí),將以異步模式發(fā)送該請(qǐng)求两曼,JavaScript代碼將繼續(xù)執(zhí)行而不再等待響應(yīng)皂甘,且必須使用一個(gè)事件處理函數(shù)來監(jiān)控請(qǐng)求的響應(yīng)。
如果將async設(shè)置為false悼凑,則將以同步模式發(fā)送該請(qǐng)求偿枕, JavaScript將等接收到響應(yīng)后再繼續(xù)執(zhí)行剩余代碼。這意味著如果響應(yīng)時(shí)間很長户辫,則用戶在瀏覽器收到響應(yīng)之前是將無法與其交互的渐夸。
基于這個(gè)原因,Ajax應(yīng)用程序開發(fā)的最佳實(shí)踐是渔欢,使用異步請(qǐng)求來實(shí)現(xiàn)數(shù)據(jù)獲取墓塌,使用同步請(qǐng) 求來實(shí)現(xiàn)與服務(wù)器之間發(fā)送和接收簡單的消息。
用同步模式來發(fā)送該請(qǐng)求(將open()方法的第三個(gè)參數(shù)設(shè)置為false)奥额,可以使你在調(diào)用send()方法之后馬上對(duì)其響應(yīng)進(jìn)行處理苫幢。
這對(duì)于想讓用戶交互等待響應(yīng),或希望只接收很少的數(shù)據(jù)(例如垫挨,小于1KB)的應(yīng)用場景是很有用的态坦。而對(duì)于通常的數(shù)據(jù)量或較大的數(shù)據(jù)量而言,最好還是使用異步調(diào)用棒拂。