求问一个 javascript 在一个 ajax 里面调用另一个函数的值问题

2014-10-11 16:48:43 +08:00
 frontman
这是获取投票状态的函数
function getVoteStatus(){
var dataStatus
$.ajax({
type: 'get',
url: "",
data:""
jsonp: "",
success: function(data) {
dataStatus=data; 写法1
//alert(data) 写法2
}
})
return dataStatus;
}
这是显示投票状态的函数参数我都没写
function showVoteStatus(){
$.ajax({
type: 'get',
url: "",
data:""
jsonp: "",
success: function(data) {
var VoteStatus=getVoteStatus();
alert(VoteStatus); //始终显示undefined
//getVoteStatus() 直接调用 而且上面的函数是写法2 则可以
}
})
}

不知道为何 求大神解答 我搞了好半天了
7708 次点击
所在节点    程序员
12 条回复
zzNucker
2014-10-11 16:50:28 +08:00
getVoteStatus是异步的啊。。。 你怎么赋值。
frontman
2014-10-11 16:55:55 +08:00
@zzNucker 那应该怎么把里面的值拿出来
jsonline
2014-10-11 16:58:08 +08:00
回调回调,欢迎来到回调的世界。
guchengf
2014-10-11 16:58:55 +08:00
dataStatus 在返回函数里,你的return不能把它 return 出来的,当然显示undefined了。
你先看一下js的作用域吧。
至于你说的直接调用和写法2,alert函数在获取投票数的回调函数内,所以可以正确获取 dataStatus
kingwrcy
2014-10-11 17:08:12 +08:00
方法一:jquery的ajax有个async,设置同步,把你的getVoteStatus设置成同步的.

方法二:在showVoteStatus的success里面去直接调用$.ajax getVoteStatus的代码,然后在getVoteStatus的success函数里面使用VoteStatus,这个就是嵌套了,即showVoteStatus success后去调用getVoteStatus,然后在getVoteStatus的success里面使用 VoteStatus 变量.代码如下:


function showVoteStatus(){
$.ajax({
type: 'get',
url: "",
data:""
jsonp: "",
success: function(data) {
$.ajax({
type: 'get',
url: "",
data:""
jsonp: "",
success: function(data) {
//这里就可以用dataStatus了
dataStatus=data; //写法1

}
})
}
})
}
ueleaves
2014-10-11 17:39:00 +08:00
@kingwrcy 这是正解。

不过使用嵌套ajax或者同步之前,可以先想想用两个ajax取数据有没有必要吧。
上个月我这样做的时候被上头骂的那个惨。
fising
2014-10-11 17:40:31 +08:00
楼主没理解ajax
weegc
2014-10-11 17:47:21 +08:00
关键词:异步,callback
frontman
2014-10-11 18:15:11 +08:00
@fising 哈哈 确实 只是会用
frontman
2014-10-11 18:15:23 +08:00
@guchengf 跨域的也行么
frontman
2014-10-11 18:15:35 +08:00
@jsonline 跨域的
fising
2014-10-11 23:47:55 +08:00
@frontman 跨域ajax调用会被浏览器block

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/138330

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX