摘要:在回調(diào)函數(shù)中,通常我們只需通過(guò)判斷請(qǐng)求是否完成,如果已完成,再根據(jù)判斷是否是一個(gè)成功的響應(yīng)。因此我們需要首先在頁(yè)面中準(zhǔn)備好回調(diào)函數(shù)當(dāng)前價(jià)格最后用函數(shù)觸發(fā)表示本域,也就是瀏覽器當(dāng)前頁(yè)面的域。
Asynchronous JavaScript and XML,意思就是用JavaScript執(zhí)行異步網(wǎng)絡(luò)請(qǐng)求。
如果仔細(xì)觀察一個(gè)Form的提交,你就會(huì)發(fā)現(xiàn),一旦用戶點(diǎn)擊“Submit”按鈕,表單開(kāi)始提交,瀏覽器就會(huì)刷新頁(yè)面,然后在新頁(yè)面里告訴你操作是成功了還是失敗了。如果不幸由于網(wǎng)絡(luò)太慢或者其他原因,就會(huì)得到一個(gè)404頁(yè)面。
這就是Web的運(yùn)作原理:一次HTTP請(qǐng)求對(duì)應(yīng)一個(gè)頁(yè)面。
如果要讓用戶留在當(dāng)前頁(yè)面中,同時(shí)發(fā)出新的HTTP請(qǐng)求,就必須用JavaScript發(fā)送這個(gè)新請(qǐng)求,接收到數(shù)據(jù)后,再用JavaScript更新頁(yè)面,這樣一來(lái),用戶就感覺(jué)自己仍然停留在當(dāng)前頁(yè)面,但是數(shù)據(jù)卻可以不斷地更新。
如果你想把標(biāo)準(zhǔn)寫法和IE寫法混在一起,可以這么寫:
var request; if (window.XMLHttpRequest) { request = new XMLHttpRequest(); } else { request = new ActiveXObject("Microsoft.XMLHTTP"); }
當(dāng)創(chuàng)建了XMLHttpRequest對(duì)象后,要先設(shè)置onreadystatechange的回調(diào)函數(shù)。在回調(diào)函數(shù)中,通常我們只需通過(guò)readyState === 4判斷請(qǐng)求是否完成,如果已完成,再根據(jù)status === 200判斷是否是一個(gè)成功的響應(yīng)。
XMLHttpRequest對(duì)象的open()方法有3個(gè)參數(shù),第一個(gè)參數(shù)指定是GET還是POST,第二個(gè)參數(shù)指定URL地址,第三個(gè)參數(shù)指定是否使用異步,默認(rèn)是true,所以不用寫。
最后調(diào)用send()方法才真正發(fā)送請(qǐng)求。GET請(qǐng)求不需要參數(shù),POST請(qǐng)求需要把body部分以字符串或者FormData對(duì)象傳進(jìn)去。
跨域:
一是通過(guò)Flash插件發(fā)送HTTP請(qǐng)求,這種方式可以繞過(guò)瀏覽器的安全限制,但必須安裝Flash,并且跟Flash交互。不過(guò)Flash用起來(lái)麻煩,而且現(xiàn)在用得也越來(lái)越少了。
二是通過(guò)在同源域名下架設(shè)一個(gè)代理服務(wù)器來(lái)轉(zhuǎn)發(fā),JavaScript負(fù)責(zé)把請(qǐng)求發(fā)送到代理服務(wù)器:
"/proxy?url=http://www.sina.com.cn"
代理服務(wù)器再把結(jié)果返回,這樣就遵守了瀏覽器的同源策略。這種方式麻煩之處在于需要服務(wù)器端額外做開(kāi)發(fā)。
第三種方式稱為JSONP,它有個(gè)限制,只能用GET請(qǐng)求,并且要求返回JavaScript。這種方式跨域?qū)嶋H上是利用了瀏覽器允許跨域引用JavaScript資源:
... ...
JSONP通常以函數(shù)調(diào)用的形式返回,例如,返回JavaScript內(nèi)容如下:
foo("data");
這樣一來(lái),我們?nèi)绻陧?yè)面中先準(zhǔn)備好foo()函數(shù),然后給頁(yè)面動(dòng)態(tài)加一個(gè)
假設(shè)本域是my.com,外域是sina.com,只要響應(yīng)頭Access-Control-Allow-Origin為http://my.com,或者是*,本次請(qǐng)求就可以成功。
可見(jiàn),跨域能否成功,取決于對(duì)方服務(wù)器是否愿意給你設(shè)置一個(gè)正確的Access-Control-Allow-Origin,決定權(quán)始終在對(duì)方手中。
無(wú)論你是否需要用JavaScript通過(guò)CORS跨域請(qǐng)求資源,你都要了解CORS的原理。最新的瀏覽器全面支持HTML5。在引用外域資源時(shí),除了JavaScript和CSS外,都要驗(yàn)證CORS。例如,當(dāng)你引用了某個(gè)第三方CDN上的字體文件時(shí):
/* CSS */ @font-face { font-family: "FontAwesome"; src: url("http://cdn.com/fonts/fontawesome.ttf") format("truetype"); }
如果該CDN服務(wù)商未正確設(shè)置Access-Control-Allow-Origin,那么瀏覽器無(wú)法加載字體資源。
對(duì)于PUT、DELETE以及其他類型如application/json的POST請(qǐng)求,在發(fā)送AJAX請(qǐng)求之前,瀏覽器會(huì)先發(fā)送一個(gè)OPTIONS請(qǐng)求(稱為preflighted請(qǐng)求)到這個(gè)URL上,詢問(wèn)目標(biāo)服務(wù)器是否接受:
OPTIONS /path/to/resource HTTP/1.1 Host: bar.com Origin: http://my.com Access-Control-Request-Method: POST
服務(wù)器必須響應(yīng)并明確指出允許的Method:
HTTP/1.1 200 OK Access-Control-Allow-Origin: http://my.com Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS Access-Control-Max-Age: 86400
瀏覽器確認(rèn)服務(wù)器響應(yīng)的Access-Control-Allow-Methods頭確實(shí)包含將要發(fā)送的AJAX請(qǐng)求的Method,才會(huì)繼續(xù)發(fā)送AJAX,否則,拋出一個(gè)錯(cuò)誤。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/83133.html
摘要:對(duì)象不但充當(dāng)全局作用域,而且表示瀏覽器窗口。對(duì)象有和屬性,可以獲取瀏覽器窗口的內(nèi)部寬度和高度。對(duì)象表示當(dāng)前頁(yè)面的信息。由于在瀏覽器中以形式表示為樹形結(jié)構(gòu),對(duì)象就是整個(gè)樹的根節(jié)點(diǎn)。這個(gè)行為由瀏覽器實(shí)現(xiàn),主流瀏覽器均支持選項(xiàng),從開(kāi)始支持。 瀏覽器 目前主流的瀏覽器: IE 6~11:從IE10開(kāi)始支持ES6標(biāo)準(zhǔn); Chrome:基于Webkit內(nèi)核,內(nèi)置了非常強(qiáng)悍的JavaScript引...
摘要:你可能認(rèn)為調(diào)用,和結(jié)果應(yīng)該是,,,但實(shí)際結(jié)果是全部都是原因就在于返回的函數(shù)引用了變量,但它并非立刻執(zhí)行。返回閉包時(shí)牢記的一點(diǎn)就是返回函數(shù)不要引用任何循環(huán)變量,或者后續(xù)會(huì)發(fā)生變化的變量。真的是看著很暈?zāi)? 閉包 另一個(gè)需要注意的問(wèn)題是,返回的函數(shù)并沒(méi)有立刻執(zhí)行,而是直到調(diào)用了f()才執(zhí)行。我們來(lái)看一個(gè)例子: function count() { var arr = []; ...
摘要:用操作表單和操作是類似的,因?yàn)楸韱伪旧硪彩菢洹R虼耍诙N方式是響應(yīng)本身的事件,在提交時(shí)作修改可以在此修改的繼續(xù)下一步注意要來(lái)告訴瀏覽器繼續(xù)提交,如果,瀏覽器將不會(huì)繼續(xù)提交,這種情況通常對(duì)應(yīng)用戶輸入有誤,提示用戶錯(cuò)誤信息后終止提交。 用JavaScript操作表單和操作DOM是類似的,因?yàn)楸韱伪旧硪彩荄OM樹。 HTML表單的輸入控件主要有以下幾種: 文本框,對(duì)應(yīng)的,用于輸入文本; ...
JSON JSON是JavaScript Object Notation的縮寫,它是一種數(shù)據(jù)交換格式。 道格拉斯·克羅克福特(Douglas Crockford)--雅虎的高級(jí)架構(gòu)師--發(fā)明了JSON這種超輕量級(jí)的數(shù)據(jù)交換格式. 序列化 讓我們先把小明這個(gè)對(duì)象序列化成JSON格式的字符串: var xiaoming = { name: 小明, age: 14, gender...
摘要:讓我們拆開(kāi)寫小明正常結(jié)果單獨(dú)調(diào)用函數(shù)怎么返回了請(qǐng)注意,我們已經(jīng)進(jìn)入到了的一個(gè)大坑里。如果單獨(dú)調(diào)用函數(shù),比如,此時(shí),該函數(shù)的指向全局對(duì)象,也就是。 函數(shù) 1. arguments JavaScript還有一個(gè)免費(fèi)贈(zèng)送的關(guān)鍵字arguments,它只在函數(shù)內(nèi)部起作用,并且永遠(yuǎn)指向當(dāng)前函數(shù)的調(diào)用者傳入的所有參數(shù)。arguments類似Array但它不是一個(gè)Array: function fo...
閱讀 3043·2021-11-25 09:43
閱讀 1626·2021-11-24 11:15
閱讀 2359·2021-11-22 15:25
閱讀 3501·2021-11-11 16:55
閱讀 3240·2021-11-04 16:10
閱讀 2773·2021-09-14 18:02
閱讀 1685·2021-09-10 10:50
閱讀 1070·2019-08-29 15:39