function ajaxret(){
var ret;
$.ajax({
url: "http://www.xxxx.com", //請求的url地址
dataType: "jsonp", //返回格式為jsonp
async: false, //請求是否異步萌衬,默認為true卵沉,即異步颖变,這也是ajax重要特性
data: { "id": "value" }, //參數(shù)值
type: "GET", //請求方式
success: function(data) {
//請求成功時處理
ret = data;
},
error: function() {
//請求出錯處理
}
});
return ret;
}
可以看到上述代碼中盖高,dataType為jsonp,可以處理跨域請求仿村;同時async為設(shè)置為false锐朴,為同步方式,即當(dāng)這個AJAX執(zhí)行完畢后才會繼續(xù)運行其他代碼蔼囊。但是發(fā)現(xiàn)在調(diào)試時焚志,仍然會執(zhí)行完之后的代碼,再去執(zhí)行ajax中的代碼畏鼓,即同步失效了酱酬,還是異步的方式,為什么呢云矫? 上網(wǎng)查閱了一些資料膳沽,發(fā)現(xiàn)jQuery的API中提到,JSONP格式不支持跨域同步让禀。因為ajax的核心是通過XmlHttpRequest獲取非本頁內(nèi)容挑社,而jsonp的核心則是動態(tài)添加<script>標簽來調(diào)用服務(wù)器提供的js腳本。jsonp的實現(xiàn)不是ajax巡揍,而是script節(jié)點,所以對ajax有效的配置未必對jsonp有效痛阻。
解決方法:將jsonp請求之后的操作放在success回調(diào)函數(shù)中處理。舉例:
function ajaxret(){
var ret;
$.ajax({
url: "http://www.xxxx.com", //請求的url地址
dataType: "json", //返回格式為json
async: false, //請求是否異步腮敌,默認為true阱当,即異步俏扩,這也是ajax重要特性
data: { "id": "value" }, //參數(shù)值
type: "GET", //請求方式
success: function(data) {
//請求成功時處理
ret = data;
},
error: function() {
//請求出錯處理
}
});
return ret;
}
使用json就能進行同步阻塞,等待ajax完成后弊添,才執(zhí)行后面的return ret;