ajax请求获得的数据如何传递给外部变量?

请问cnname如何能获取到json.cnname的值?

 function findTypeName(id){
    var cnname;
    $.ajax({
        url:urlheader+"selectTypeById.html",
        data:{id:id},
        datatype:"json",
        success:function(data){
            var json = eval('(' + data + ')');
            console.log(json);
            cnname=json.cnname;
        }
    });
    return cnname;
}

10个回答

你ajax要用同步的就可以了
如:
$.ajax({
url: "some.php",
async: false
});

wangnl_okay
wangnl_okay 把异步改同步,但是这样的话,ajax的异步初衷就没有任何意义了。解决的一个办法就是利用面向对象的方式。可以将ajax返回的值存储在对象的属性中,在对象的方法里处理数据。(ajax异步获取和处理都是在对象里进行)
接近 3 年之前 回复
wild84
wild84 用你的方法可以,但是jquery不支持这样做,报了个警告,还有没有其他方法?
接近 3 年之前 回复

JS是单线程的,会先走完主函数findTypeName(id),再去走$.ajax();所以没有获取到值,这种队列模式造成了异步的假象,其实是先走主函数,然后遇到了$.ajax();会让$.ajax();选择合适的时机添加到队列中等待执行,主函数执行完之后,再去队列中执行执行等待的队列,就算设置了$.ajax()立即进去队列,也不会马上执行,还是要先走完主函数。

gudaichaoren
gudaichaoren 你好!如果加上了false,那作用范围是对当前方法内的ajax请求有效,还是整个html页面的ajax请求都false了?
接近 2 年之前 回复
zhwyj1019
innerpeacez 回复wild84: 两种方法:1、在回调函数加上async:false;2、回调函数中还可以写函数,不需要返回,直接在回调函数中写你需要做的其他功能
接近 3 年之前 回复
wild84
wild84 那么这种情况怎解决呢?如何让它先走ajax的回调函数?
接近 3 年之前 回复
zhwyj1019
innerpeacez 刚刚我测试了一下,你分别在主函数的最后中alert(cnname),和回调函数中alert(cnname),先弹出的undefined,再弹出你获取到的cnname的值,证明了先走的是主函数
接近 3 年之前 回复

这样不能赋值??

感觉是json.cnname,,没获取到,

Small_Mouse0
鼠小 回复wild84: return cnname;,,放到success里面行不行,,
接近 3 年之前 回复
wild84
wild84 json.cnname有获取到,已经alert()出来了
接近 3 年之前 回复

应该是已经得到了,你尝试不要return先alert一下,看看有没有值,你确定json.cnname有值么?

wild84
wild84 json.cnname有值,alert()过,后来删了
接近 3 年之前 回复

由于是异步的, cnname=json.cnname这个肯定能赋值成功,但是用return 就不合适了,因为异步的原因,一般会先return 了后有 cnname=json.cnname赋值,所以楼主的return没有用!要么改成同步,要么看楼主的需求具体是什么,更改代码!

wild84
wild84 大概了解出异常的原因.我的需求是外部调用这个函数时给一个类型id,这个函数返回数据库取出的类型名称?请教具体怎么改?
接近 3 年之前 回复

这是一个变量的作用域问题,解决的方法有几个,
第一,把需要cnname这个变量的函数放到success里面去执行,然后以传参的方式把cnname传过去就好了
第二,把cnname设为全局变量,并且在success里面做一个开关,实时监测success状态,只有成功之后再去调用cnname这个变量

在js里面加个$.ajaxSetup({
async : false
});

可以根据id获或者class获取
id获取的方法是$("id").val()
class的方法是$(".classid").val()

你想把值传到外部 cnname在声明的时候在方法外面声明,在你的方法里面直接赋值就能传递了

ajax本来是异步的,像服务器发送异步的请求之后,不等服务器的,可以换个写法。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问