jQueryAjax使用心得及注意事項(xiàng)分別是什么-創(chuàng)新互聯(lián)

jQuery Ajax使用心得及注意事項(xiàng)分別是什么,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的平順網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

IE7及以下請求方式用GET的話,URL的限制是個(gè)很容易忽視的問題(較大2083個(gè)字符)。所以如果URL有可能過長的話,一定要用POST。

終止Ajax請求
終止請求需要調(diào)用XMLHttpRequest對象的abort()方法
而在jQuery中的$.get,$.post、$.ajax、$.getJSON、$.getScript...的返回值都是XMLHttpRequest對象.
調(diào)用abort()后,ajax請求立即停止,但仍然會(huì)執(zhí)行success的回調(diào)函數(shù)
所以在success的回調(diào)函數(shù)中需要先判斷 ajaxGet 或 data是否存在,存在才執(zhí)行回調(diào)函數(shù)


 代碼如下:


var ajaxGet = $.get(someURL,someData,function(data){
if(!data)return true;
//TODO
});
ajaxGet.abort();



說到跨域資源共享(CORS Cross-Origin Resoure Sharing),現(xiàn)在正變的越來越重要。各種地圖API,微博API等等,網(wǎng)站開發(fā)人員不必自己去放衛(wèi)星,只要根據(jù)別人開放的接口,就能獲取到這些數(shù)據(jù)。
這得益于跨源策略。

JSONP就是跨源策略的一種方案?;驹砭褪抢脼g覽器允許跨域獲取script資源(包括圖片)的特點(diǎn),在服務(wù)器端生成script Tag,并傳回客戶端。

要注意的是,服務(wù)器端返回的不是JSON格式的字符串,而是callbackName+"("+JSON_string+")"也就是JSONP。

這就相當(dāng)于服務(wù)器把一段JS代碼(被賦值的函數(shù))返回瀏覽器,然后立即執(zhí)行。
所以,在瀏覽器端發(fā)送的URL中(以GET的形式),需要把回調(diào)函數(shù)名傳入。
客戶端:


 代碼如下:


function deal(data){
//TODO
}
var s= document.createElement("script")
//不必一定叫callback,但是一定要跟服務(wù)器端的Request.QueryString匹配
s.src = "http://172.20.2.60:8088/newwebsite/MyHandler.ashx?callback=func";
document.body.appendChild(s)



服務(wù)器端(.Net)


代碼如下:


<%@ WebHandler Language="C#" Class="Test" %>
using System;
using System.Web;
public class Test : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.Charset = "utf-8";
context.Response.ContentType = "text/javascript";
string callback = context.Request.QueryString["callback"];//回調(diào)函數(shù)名
string json = "{'name':'Ray','msg':'hello world!'}";//JSON格式的字符串
string result = string.Format("{0}({1})", callback, json);
context.Response.Write(result);
context.Response.Flush();
context.Response.End();
}
public bool IsReusable {
get {
return false;
}
}
}



用jQuery的話,URL中就不用加回調(diào)函數(shù)名了,因?yàn)閖Query已經(jīng)為你代勞了,而這個(gè)回調(diào)函數(shù)就是success。


 代碼如下:


$.ajax({
url: "http://172.20.2.60:8088/newwebsite/MyHandler.ashx"
, dataType: "jsonp"
, success: function(data) {
//TODO
}
});



JSONP很強(qiáng)大,但是也有兩個(gè)讓人蛋疼的地方,首先是安全性問題。
不管怎么說你都是從別人的地盤倒騰數(shù)據(jù),而且內(nèi)容還是腳本!也就是說如果人家是個(gè)壞人,給你點(diǎn)惡意代碼,那就不好辦了。

當(dāng)然這個(gè)問題一般也不會(huì)發(fā)生。畢竟咱想請求數(shù)據(jù)的地方都是咱熟悉的要么就是官方的(什么谷歌地圖API,新浪微博API這些顯然不會(huì)給你坑)。

另一個(gè)問題就鬧心了。瀏覽器端對JSONP的請求是否失敗是無法直接知曉的。就算用jQuery,error也不起作用。就算出錯(cuò)了try,catch也捕捉不到。

所以暫時(shí)知道的只有一種不完美方法,就是設(shè)定一個(gè)時(shí)限,如果超過時(shí)限還沒有數(shù)據(jù)返回,那么就判定error。說不完美是因?yàn)?,各家的網(wǎng)速是不同的,所以...你懂得。

jQuery中contentType相關(guān)



 代碼如下:


contentType
Default: 'application/x-www-form-urlencoded; charset=UTF-8'
When sending data to the server, use this content type.
Default is "application/x-www-form-urlencoded; charset=UTF-8", which is fine for most cases.
If you explicitly pass in a content-type to $.ajax(),
then it'll always be sent to the server (even if no data is sent).
If no charset is specified, data will be transmitted to the server using the server's default charset;
you must decode this appropriately on the server side.



通過這段文字我們就可以知道在jQuery ajax中 contentType默認(rèn)是'application/x-www-form-urlencoded; charset=UTF-8' 當(dāng)然這是新版jQuery的。相對于以前版本是有些許變化的。

如果想將一個(gè)對象序列化后傳向后臺(tái),可以將contentType設(shè)置為'application/json'

關(guān)于jQuery Ajax使用心得及注意事項(xiàng)分別是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

分享標(biāo)題:jQueryAjax使用心得及注意事項(xiàng)分別是什么-創(chuàng)新互聯(lián)
路徑分享:http://muchs.cn/article0/ddhcoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、App開發(fā)、網(wǎng)站導(dǎo)航、電子商務(wù)、網(wǎng)站營銷、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司