Ajax异步/同步执行的问题

关于ajax的异步与同步执行,在于关键词,async:true/false默认为true,异步执行。

false代表同步执行,即执行该ajax请求时,其余js代码被锁定,不能执行。等到ajax执行完毕后继续执行。

function addApar() {
	var managerId = 10;
	console.log($("#managerName").val());
	$.ajax({
		type : "POST",
		url : "/gradPro/apar/getManId.action",
		cache : false,
		async : true,
		datatype : "json",
		data : {
			"managerName" : $("#managerName").val(),
		},
		success : function(result) {
			managerId = result;
		}
	});
	console.log(managerId);
}

如此段代码,声明了异步执行为true。

springmvc中代码块如下: 注意 springmvc中用@RequestParam声明接受过来的单个参数,@PathVariable声明为URL即@RequestMapping中url的占位变量。如value="{who}/getManId.action"。可用变量声明占据url同时也是RESTFUL风格的URL初现。@RequestBody接受json字符串。ajax请求往往传的是json对象,应用data : JSON.stringify(javascript对象),将json对象转换成json字符串后传输。同时声明dataType:"json",contentType:"application/json",type:"post"设置请求头信息。

/**
	 * 拿到管理员ID
	 * 
	 * @param managerName
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "getManId.action", method = RequestMethod.POST)
	public int getManagerId(@RequestParam("managerName") String managerName) {
		int data = apartmentService.getManagerId(managerName);
		return data;
	}

执行如下所示:

执行到ajax请求时 后台debug未能进入断点(110行)中。


ajax请求执行完成后,eclipse才响应进入断点(其实多次测试后发现是随机的。有可能也立即响应),但此次将返回值存入上级函数变量中失败。


下面试试同步执行的结果:如图async改为false。


扫描二维码关注公众号,回复: 1790411 查看本文章

刷新页面,如过js未刷新,可尝试Ctrl+f5。实在不行清除浏览器缓存。

如图 JS文件已刷新。


执行到ajax请求时。js代码被锁定。后台debug响应。


数据取出成功后装入函数变量managerId



完。注:这个请勿和ajax跨域混淆概念(暂未详细了解)。

猜你喜欢

转载自blog.csdn.net/weixin_41809916/article/details/79829897