一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Ajax學(xué)習(xí)(6)

 空城66 2014-10-24

 

  JSON 是適用于 Ajax 應(yīng)用程序的一種有效格式,原因是它使 JavaScript 對(duì)象和字符串值之間得以快速轉(zhuǎn)換。由于 Ajax 應(yīng)用程序非常適合將純文本發(fā)送給服務(wù)器端程序并對(duì)應(yīng)地接收純文本,相比不能生成文本的 API,能生成文本的 API 自然更可??;而且,JSON 讓您能夠處理本地 JavaScript 對(duì)象,而無(wú)需為如何表示這些對(duì)象多費(fèi)心思。
XML 也可以提供文本方面的類(lèi)似益處,但用于將 JavaScript 對(duì)象轉(zhuǎn)換成 XML 的幾個(gè)現(xiàn)有 API 沒(méi)有 JSON API 成熟;有時(shí),您必須在創(chuàng)建和處理 JavaScript 對(duì)象時(shí)格外謹(jǐn)慎以確保所進(jìn)行的處理能與所選用的 XML 會(huì)話 API 協(xié)作。但對(duì)于 JSON,情況就大不相同:它能處理幾乎所有可能的對(duì)象類(lèi)型,并會(huì)返回給您一個(gè)非常好的 JSON 數(shù)據(jù)表示。
因此,JSON 的最大價(jià)值在于可以將 JavaScript 真的作為 JavaScript 而非數(shù)據(jù)格式語(yǔ)言進(jìn)行處理。您所學(xué)到的所有有關(guān)使用 JavaScript 對(duì)象的技巧都可以應(yīng)用到代碼中,而無(wú)需為如何將這些對(duì)象轉(zhuǎn)變成文本而多費(fèi)心思。這之后,可以進(jìn)行如下所示的簡(jiǎn)單 JSON 方法調(diào)用:

String myObjectInJSON = myObject.toJSONString();

現(xiàn)在就可以將結(jié)果文本發(fā)送給服務(wù)器了。


*將 JSON 發(fā)給服務(wù)器
----通過(guò) GET 以名稱(chēng)/值對(duì)發(fā)送 JSON

將 JSON 數(shù)據(jù)發(fā)給服務(wù)器的最簡(jiǎn)單方法是將其轉(zhuǎn)換成文本,然后以名稱(chēng)/值對(duì)的值的方式進(jìn)行發(fā)送。請(qǐng)務(wù)必注意,JSON 格式的數(shù)據(jù)是相當(dāng)長(zhǎng)的一個(gè)對(duì)象,看起來(lái)可能會(huì)如清單 1 所示:
清單 1. JSON 格式的簡(jiǎn)單 JavaScript 對(duì)象
               
var people =  { "programmers": [    { "firstName": "Brett", "lastName":"McLaughlin",
"email": " "email": " "email": " "lastName": "Asimov", "genre": "science fiction" },    { "firstName": "Tad",
"lastName": "Williams", "genre": "fantasy" },    { "firstName": "Frank",
"lastName": "Peretti", "genre": "christian fiction" }   ],  "musicians": [   
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },  
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }   ]  }
 
如果要以名稱(chēng)/值對(duì)將其發(fā)送到服務(wù)器端,應(yīng)該如下所示:

var url = "organizePeople.aspx?people=" + people.toJSONString();
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(null);

存在一個(gè)問(wèn)題:在 JSON 數(shù)據(jù)中會(huì)有空格和各種字符,Web 瀏覽器往往要嘗試對(duì)其繼續(xù)編譯。要確保這些字符不會(huì)在服務(wù)器上(或者在將數(shù)據(jù)發(fā)送給服務(wù)器的過(guò)程中)引起混亂,需要在 JavaScript escape() 函數(shù)中做如下添加:

var url = "organizePeople.aspx?people=" + escape(people.toJSONString());
request.open("GET", url, true);
request.onreadystatechange = updatePage;
request.send(null);

該函數(shù)可以處理空格、斜線和其他任何可能影響瀏覽器的內(nèi)容,并將它們轉(zhuǎn)換成 Web 可用字符(比如,空格會(huì)被轉(zhuǎn)換成 %20,瀏覽器并不會(huì)將其視為空格處理,而是不做更改,將其直接傳遞到服務(wù)器)。之后,服務(wù)器會(huì)(通常自動(dòng))再把它們轉(zhuǎn)換回它們傳輸后的本來(lái) “面目”。

這種做法的缺點(diǎn)有兩個(gè):
在使用 GET 請(qǐng)求發(fā)送大塊數(shù)據(jù)時(shí),對(duì) URL 字符串有長(zhǎng)度限制。雖然這個(gè)限制很寬泛,但對(duì)象的 JSON 字符串表示的長(zhǎng)度可能超出您的想象,尤其是在使用極其復(fù)雜的對(duì)象時(shí)更是如此。
在跨網(wǎng)絡(luò)以純文本發(fā)送所有數(shù)據(jù)的時(shí)候,發(fā)送數(shù)據(jù)面臨的不安全性超出了您的處理能力。
簡(jiǎn)言之,以上是 GET 請(qǐng)求的兩個(gè)限制,而不是簡(jiǎn)單的兩個(gè)與 JSON 數(shù)據(jù)相關(guān)的事情。在想要發(fā)送用戶(hù)名和姓之外的更多內(nèi)容,比如表單中的選擇時(shí),二者可能會(huì)需要多加注意。若要處理任何機(jī)密或極長(zhǎng)的內(nèi)容,可以使用 POST 請(qǐng)求。

----利用 POST 請(qǐng)求發(fā)送 JSON 數(shù)據(jù)

當(dāng)決定使用 POST 請(qǐng)求將 JSON 數(shù)據(jù)發(fā)送給服務(wù)器時(shí),并不需要對(duì)代碼進(jìn)行大量更改,如下所示:

var url = "organizePeople.php?timeStamp=" + new Date().getTime();
request.open("POST", url, true);
request.onreadystatechange = updatePage;
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send(people.toJSONString());

使用 POST 而非 GET 打開(kāi),Content-Type 頭被設(shè)置為讓服務(wù)器預(yù)知它能得到何種數(shù)據(jù)。在這種情況下,即為 application/x-www-form-urlencoded,它讓服務(wù)器知道現(xiàn)在發(fā)送的是文本,正如它從常規(guī)的 HTML 表單中得到的一樣。
另一個(gè)簡(jiǎn)單提示是 URL 的末尾追加了時(shí)間。這就確保了請(qǐng)求不會(huì)在它第一次被發(fā)送后即緩存,而是會(huì)在此方法每次被調(diào)用后重新創(chuàng)建和重發(fā);此 URL 會(huì)由于時(shí)間戳的不同而稍微有些不同。這種技巧常被用于確保到腳本的 POST 每次都會(huì)實(shí)際生成新請(qǐng)求且 Web 服務(wù)器不會(huì)嘗試緩存來(lái)自服務(wù)器的響應(yīng)。

*在服務(wù)器上解釋 JSON
處理 JSON 的兩步驟:
針對(duì)編寫(xiě)服務(wù)器端程序所用的語(yǔ)言,找到相應(yīng)的 JSON 解析器/工具箱/幫助器 API。
使用 JSON 解析器/工具箱/幫助器 API 取得來(lái)自客戶(hù)機(jī)的請(qǐng)求數(shù)據(jù)并將數(shù)據(jù)轉(zhuǎn)變成腳本能理解的東西。

尋找 JSON 解析器或工具箱最好的資源是 JSON 站點(diǎn)(有關(guān)鏈接,請(qǐng)參閱 參考資料)。在這里,除了可以了解此格式本身的方方面面之外,還可以通過(guò)各種鏈接找到 JSON 的各種工具和解析器,從 ASP 到 Erlang,到 Pike,再到 Ruby,應(yīng)有盡有。您只需針對(duì)自己編寫(xiě)腳本所用的語(yǔ)言下載相應(yīng)的工具箱即可。為了讓服務(wù)器端腳本和程序能夠使用此工具箱,可以根據(jù)情況對(duì)其進(jìn)行選擇、擴(kuò)展或安裝(如果在服務(wù)器端使用的是 C#、PHP 或 Lisp,則可變性更大)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    亚洲清纯一区二区三区| 日本不卡在线视频你懂的| 国内胖女人做爰视频有没有| 白白操白白在线免费观看| 国产精品香蕉免费手机视频| 九九热这里只有免费精品| 欧美午夜性刺激在线观看| 亚洲中文字幕日韩在线| 一区二区三区亚洲国产| 中文字幕精品一区二区三| 青青操视频在线观看国产| 午夜精品在线观看视频午夜| 午夜小视频成人免费看| 日韩高清中文字幕亚洲| 亚洲精品日韩欧美精品| 99久久免费中文字幕| 麻豆蜜桃星空传媒在线观看| 中国美女草逼一级黄片视频| 在线免费国产一区二区| 空之色水之色在线播放| 91超精品碰国产在线观看| 国产精品偷拍视频一区| 欧美特色特黄一级大黄片| 欧美黑人精品一区二区在线| 久久青青草原中文字幕| 日韩和欧美的一区二区三区| 欧美日韩精品人妻二区三区 | 五月婷婷六月丁香亚洲| 青青操精品视频在线观看| 人妻少妇久久中文字幕久久| 国产午夜福利片在线观看| 亚洲中文字幕视频在线播放 | 老司机精品视频在线免费看| 激情综合五月开心久久| 中文字幕亚洲人妻在线视频| 亚洲a码一区二区三区| 人妻人妻人人妻人人澡| 午夜福利激情性生活免费视频| 亚洲精品国男人在线视频| 美女被啪的视频在线观看| 在线视频三区日本精品|