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"]}
请问为什么无法得到函数返回的数值?
因为ajax是异步的..
但是我加上了async:false了啊?如果碰到这种情况我应该怎么才能得到我想要的数据?
@刘冰0117: 你分别在success: function(data) {
for (var i = 0; i < data.code.length; i++) {这个for这里
和下面的returne arrData 打断点 .看他先停在哪里就是.
一般异步就异步了.你直接在success: function(data) { 操作返回值就是.
@吴瑞祥: 这种情况我之前试过了,但是还是没有效果
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: 你在异步里面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);
}
多了解下多线程-同步-异步吧.思路不对
Debug看下QueryMetricName.do这个后台function返回的是什么?
就是我写上去的那一串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"]}
有返回值但是最后得不到结果
会调试js吗?
会调试。目前问题算是解决了,我把对返回数组的操作放到了success里面。我想问问我这个思路怎么实现?
@刘冰0117: 操作arrData 把它写在循环外面不就行了吗....不是很明白你的意思
不适应异步方式?