从Ajax函数返回值
问题描述:
我试图创建一个文本块,当文本从Json字符串更改时将自动更新。从Ajax函数返回值
基本上我开始与:
function streamSong(index) {
if (!isUndefined(myPlaylist[index].title))
return myPlaylist[index].title;
else return '';
}
然后修改它看起来像这样:
function streamSong(index) {
var currentSongName = 'here';
if (!isUndefined(myPlaylist[index].title)) {
var intervalFunc = function(){
var jsonData = null;
$.ajax({
url: 'http://www.thesite.com/pullJson.php?stream=rapstation',
dataType: "json",
data: { get_param: 'employees' },
success: function (data) {
currentSongName = 'now here';
},
error: function (data) {
currentSongName = 'not working';
}
});
};
setInterval (intervalFunc, 60000);
setTimeout (intervalFunc, 1);
return currentSongName;
}
else return 'no title';
}
第一个功能发射了罚款,并返回我的数据流标题。 第二个函数触发,但我永远不能修改currentSongName的值。
我对JavaScript和ajax还是有点新东西,所以原谅我的无知,但我显然希望最终将currentSongName的值设置为我检索的Json值,但现在我只希望它能够更改定时器上的值。
我对这一切都错了吗?
答
该变量修改得很好,但为时已晚。 AJAX调用是异步的,因此该变量用于在赋值之前返回值。
您将使用回调来处理结果。与原来的代码就应该是这样的:
function streamSong(index, callback) {
if (!isUndefined(myPlaylist[index].title)) {
callback(myPlaylist[index].title);
} else {
callback('');
}
}
用法:
streamSong(42, function(title) {
// do what you want with the title
});
对于AJAX调用回调将用于这样的:
function streamSong(index, callback) {
var currentSongName = 'here';
if (!isUndefined(myPlaylist[index].title)) {
var intervalFunc = function(){
var jsonData = null;
$.ajax({
url: 'http://www.thesite.com/pullJson.php?stream=rapstation',
dataType: "json",
data: { get_param: 'employees' },
success: function (data) {
callback('now here');
},
error: function (data) {
callback('not working');
}
});
};
setInterval (intervalFunc, 60000);
setTimeout (intervalFunc, 1);
} else {
callback('no title');
}
}
检查[这](HTTP ://stackoverflow.com/questions/27509/detecting-an-undefined-object-property)了解如何检查未定义的变量。 – D4V1D 2015-04-03 19:58:56
我有点失落,你想告诉我什么。我知道我的varriable有一个值,因为我将该值设置在该函数的顶部: var currentSongName ='here'; 然后在底部,(在ajax调用之外)我返回currentSongName。 我回来并显示在我的网页上的是'这里'。 但正如你可以看到我试图改变它的价值取决于如果ajax调用成功或者如果有错误。 – Klutch 2015-04-03 20:03:06
重复http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call – 2015-04-03 20:08:21