关于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。
刷新页面,如过js未刷新,可尝试Ctrl+f5。实在不行清除浏览器缓存。
如图 JS文件已刷新。
执行到ajax请求时。js代码被锁定。后台debug响应。
数据取出成功后装入函数变量managerId
完。注:这个请勿和ajax跨域混淆概念(暂未详细了解)。