首页 新闻 会员 周边

jQuery ajax操作的返回值

0
悬赏园豆:10 [已解决问题] 解决于 2017-11-08 11:26
function getData(val) {
var arrData = new Array();
if (val != "") {
$.ajax({
      type:"GET",
url:"../QueryMetricName.do",
data:{metric_name:val},
async:false,
jsonp: "callback",
dataType:"jsonp",
jsonpCallback:"jsonpCallback",
cache: false,
success: function(data) {
for (var i = 0; i < data.code.length; i++) {
        arrData.push(data.code[i]);
}
},
Error: function(err) {
alert(err);
}
});
}
return arrData;
}
console.log(getData("a"));  //[]空数组

//返回值:{"code": ["ats.status.bandwidth_hit_ratio", "ats.status.cache_bytes_used", "ats.status.cache_hit_mem_ratio", "ats.status.cache_hit_ratio", "ats.status.client_connections", "ats.status.client_throughput_out", "ats.status.direntries_used", "ats.status.ram_cache_bytes_used", "ats.status.server_connections", "ats.status.user_agent_xacts_per_second"]}

请问为什么无法得到函数返回的数值?
刘冰0117的主页 刘冰0117 | 初学一级 | 园豆:102
提问于:2016-10-27 14:54
< >
分享
最佳答案
0

因为ajax是异步的..

收获园豆:10
吴瑞祥 | 高人七级 |园豆:29449 | 2016-10-27 14:59

但是我加上了async:false了啊?如果碰到这种情况我应该怎么才能得到我想要的数据?

刘冰0117 | 园豆:102 (初学一级) | 2016-10-27 15:01

@刘冰0117: 你分别在success: function(data) {
for (var i = 0; i < data.code.length; i++) {这个for这里

和下面的returne arrData 打断点 .看他先停在哪里就是.

一般异步就异步了.你直接在success: function(data) { 操作返回值就是.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-10-27 15:04

@吴瑞祥: 这种情况我之前试过了,但是还是没有效果

success: function(data) {
  for (var i = 0; i < data.code.length; i++) {
    arrData.push(data.code[i]);
  }
  console.log(arrData);  //有正确数值
  return arrData;
}

函数外:console.log(getData("a"));  //还是没有任何值

刘冰0117 | 园豆:102 (初学一级) | 2016-10-27 15:12

@刘冰0117: 你在异步里面return当然不行...就别getdata("a")了

写一个要使用这个返回值的函数.比如 fun(obj).然后在

success: function(data) {
  for (var i = 0; i < data.code.length; i++) {
    arrData.push(data.code[i]);
  }
  console.log(arrData);  //有正确数值
  fun(arrData);
}

多了解下多线程-同步-异步吧.思路不对

吴瑞祥 | 园豆:29449 (高人七级) | 2016-10-27 17:55
其他回答(3)
0

Debug看下QueryMetricName.do这个后台function返回的是什么?

~扎克伯格 | 园豆:1923 (小虾三级) | 2016-10-27 15:02

就是我写上去的那一串json返回值:{"code": ["ats.status.bandwidth_hit_ratio", "ats.status.cache_bytes_used", "ats.status.cache_hit_mem_ratio", "ats.status.cache_hit_ratio", "ats.status.client_connections", "ats.status.client_throughput_out", "ats.status.direntries_used", "ats.status.ram_cache_bytes_used", "ats.status.server_connections", "ats.status.user_agent_xacts_per_second"]}

有返回值但是最后得不到结果

支持(0) 反对(0) 刘冰0117 | 园豆:102 (初学一级) | 2016-10-27 15:04
0

会调试js吗?

攻城头狮 | 园豆:208 (菜鸟二级) | 2016-10-31 12:39

会调试。目前问题算是解决了,我把对返回数组的操作放到了success里面。我想问问我这个思路怎么实现?

支持(0) 反对(0) 刘冰0117 | 园豆:102 (初学一级) | 2016-10-31 12:43

@刘冰0117: 操作arrData  把它写在循环外面不就行了吗....不是很明白你的意思

支持(0) 反对(0) 攻城头狮 | 园豆:208 (菜鸟二级) | 2016-10-31 12:47
0

不适应异步方式?

顾晓北 | 园豆:10844 (专家六级) | 2016-11-02 11:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册