wild84
2017-09-11 03:42
采纳率: 99.5%
浏览 7.7k
已采纳

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条回答 默认 最新

  • jessiejessie_zhou 2017-09-11 03:54
    已采纳

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

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 鼠小 2017-09-11 03:51

    这样不能赋值??

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

    评论
    解决 无用
    打赏 举报
  • 我本狂儒 2017-09-11 03:53

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

    评论
    解决 无用
    打赏 举报
  • 砸死接触 2017-09-11 04:22

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

    评论
    解决 无用
    打赏 举报
  • /*----无忧----*/ 2017-09-11 04:37

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

    评论
    解决 无用
    打赏 举报
  • innerpeacez 2017-09-11 04:49

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

    评论
    解决 无用
    打赏 举报
  • usecf 2017-09-11 05:01

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

    评论
    解决 无用
    打赏 举报
  • mr_tu_ 2017-09-11 07:18

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

    评论
    解决 无用
    打赏 举报
  • IAmObject 2017-09-11 09:07

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

    评论
    解决 无用
    打赏 举报
  • 蓝同学. 2017-09-11 10:00

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题