關於js中Ajax的同步、異步使用


下面一個簡單的例子,說明前后端交互中,Ajax同步和異步的使用

1、設置簡單的一個div,包含觸發事件

CompanyType()
<div>
<input type="hidden" id="branchHidden" name="branchHidden" value="" />
<input type="hidden" id="companyType" name="companyType" value="" />
@Html.DropDownList("companyList", ViewData["companyList"] as SelectList, new { @class = "select1 month", id = "branch", onchange = "CompanyType();Time1();" })
</div>

2、寫一個Ajax,調用后台的方法

<script type="text/javascript">
function CompanyType() {
var companyId = document.getElementById('branchHidden').value;//獲取隱藏域的值
$.ajax({
url: "@Url.Action("GetCompanyNatureId", "Basic")",//需要調用的控制器里面的方法;控制器名
Basic,方法名
GetCompanyNatureId,,,,,url的寫法有多種,也可以寫成其他形式的url
async: false, //這個表示是否同步,false是同步,,,,true是異步,,,,,如果不寫這個,默認為異步,,,注意點!!!
data: { companyId: companyId }, //data是要傳的參數,冒號前面是參數名,務必和后台方法體的參數名保持一致,后面是要傳的參數值
success: function (data) {
$(
"#companyType").val(data); } //這個data是后台接口調用成功之后返回的參數,需要注意的是,如果掉成功之后在這個function函數里面要執行這樣的方法,並使用返回參數,那么后台接口的返回值類型要設置字符串類型,具體看下方代碼
});
}
</script>
public string GetCompanyNatureId(string CompanyId)
        {
            return business.GetCompanyNatureId(CompanyId);
        }
 public string GetCompanyNatureId(string CompanyId)
        {
            string CompanyNatureId = "";
            CompanyMdl subCompany = new core.CompanyMdl { CompanyID = CompanyId };
            BaseResponse<List<CompanyMdl>> RsCompany = new BaseResponse<List<core.CompanyMdl>>();
            RsCompany = data.GetSubCompanyList(subCompany);
            List<CompanyMdl> companyList = new List<CompanyMdl>();
            companyList = RsCompany.Data;
            if (companyList.Count > 0)
            {
                CompanyNatureId = companyList[0].CompanyNatureId;
            }
            return CompanyNatureId;
        }
string apiUrl = System.Configuration.ConfigurationManager.AppSettings["APIUrl"].ToString(); //api地址  
//這個是調用接口的數據
public BaseResponse<List<CompanyMdl>> GetSubCompanyList(CompanyMdl subCompany) { BaseResponse<List<CompanyMdl>> Response = new BaseResponse<List<CompanyMdl>>(); try { Response = SendHttpRequest<BaseResponse<List<CompanyMdl>>>(apiUrl + "api/Bx/GetSubCompanyList",GetJsonFromObj<CompanyMdl>(subCompany), CommonHttpWebMethodEnum.POST); } catch (Exception ex) { throw ex; } return Response; }

注意一下紅色標識!!!

我的觸發事件中有兩個函數的調用:CompanyType();Time1();

那么,同步和異步究竟是怎么體現的呢?

第一種情況:

我的

CompanyType()中有Ajax的調用,而且返回值要在
Time1()函數中用到,所以,
我需要先調用完后台接口之后,再執行
Time1()函數,這就要用同步,,,,Ajax和后台接口執行完了之后,再走下一個函數;
第二種情況:
CompanyType()和
Time1(),相互獨立,沒有交叉的引用,那么,我可以選擇使用異步,這兩個函數先后執行完之后,Ajax調用的后台接口再去執行,這樣表達在頁面上,執行效率就會快很多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM