function ajaxData(url,username){
$.ajax({
type: "POST",
url: url,
data: "username=" + username,
beforeSend: function(){ },
success: function(msg){
alert(msg); //这里有值
return msg;
}});
}function testData(){
var test = ajaxData(url,username);
alert(test); //这里怎么获取不到ajaxData返回值啊?
}
function ajaxData(url,username){
$.ajax({
type: "POST",
url: url,
data: "username=" + username,
beforeSend: function(){ },
success: function(msg){
testData(msg);
}});
}function testData(obj){
var test = obj;
alert(test); //这样获取?
}
alert(test); //这里怎么获取不到ajaxData返回值啊?
$.ajax({
type: "POST",
url: url,
data: "username=" + username,
beforeSend: function(){ },
success: function(msg){
alert(msg); //这里有值
return msg;//这而return是success方法的返回值,不是ajaxData的
}});
}function testData(){
var test = ajaxData(url,username);//如上,ajaxData方法没有返回值
alert(test); //理所当然的没有值
}要获取后台的返回信息,只能在回调函数,你这种打包方式不可能成功
1 改成非异步
2 在 success:function(){ 这里调用你的方法 }
$.ajax({
type: "POST",
url: url,
async:false, //看这边,加个这个就变为同步,就可以了
data: "username=" + username,
beforeSend: function(){ },
success: function(msg){
alert(msg); //这里有值
return msg;
}});
}function testData(){
var test = ajaxData(url,username);
alert(test); //这里怎么获取不到ajaxData返回值啊?
}
2 使用全局变量在success里面赋值然后处理
如果能像你这样写,jquery直接给你打包好不就行了,还要你包装?
你要写也只能和jquery一样,把请求参数作为参数传递到你的函数,同时还传一个函数类型的参数作为处理函数(回调函数),在ajax回调函数中调用这个函数,把后台的返回结果传递到这个函数呃,这其实也就和jquery提供的函数一样了,因为jquery已经尽可能做到最好了你没有理解这些函数怎么回事,如果你理解,你就该知道,框架给你提供的函数已经打包得尽可能的完美了...
而且也能知道为什么jquery要写成它那样而不是你那样,以为你那个是根本不可能实现的...你要知道服务器与客户端通信是一个过程,需要时间的,要实现你那种直接调用函数,通过返回值获取到后台的返回值,唯一的办法就是阻塞住主线程,直到通信完成,也就是说在通信过程中,页面就死那儿了。但这样的话,你还用ajax干什么?
ajax技术的目的就是要实现异步通信