我有一个调用另一个函数的函数,我想将返回的结果存储在一个变量中:
function trigger_gridly(){
var channel_name = get_channel_name();
}
被调用函数触发一个AJAX请求,该请求触发一个接收JSON的回调:
function get_channel_name(){
var channel_name;
$.getJSON(APPLICATION_DOMAIN + "channels/new.json?callback=?", null, handleJson);
}
function handleJson(channel){
var channel_name = channel.name;
return channel_name;
}
问题是channel_name
中的trigger_gridly()
在channel_name
回调函数中没有收到handleJson
的值。如何将回调中的数据公开给trigger_gridly()
函数?
答案 0 :(得分:1)
正如其他人所指出的那样,getJSON是一个异步调用。在通道可用之前,您必须等待它调用您的回调。以下是我编写代码的方法:
function trigger_gridly() {
get_channel_name(function(channel){
var channel_name = channel.name;
// Do something with channel_name
});
}
function get_channel_name(success) {
$.getJSON(APPLICATION_DOMAIN + "channels/new.json?callback=?", null, success);
}
编辑:我喜欢的另一种选择:
function trigger_gridly(channel) {
var channel_name = channel.name;
// Do something with channel_name
}
function get_channel_name(success) {
$.getJSON(APPLICATION_DOMAIN + "channels/new.json?callback=?", null, success);
}
get_channel_name(trigger_gridly);
答案 1 :(得分:0)
它非常难看,但这会起作用,异步过程总是有点棘手getJSON
是异步的。
function get_channel_name(fn) {
$.getJSON(APPLICATION_DOMAIN + "channels/new.json?callback=?", null, function(channel) {
fn(channel.name);
});
}
var channel_name;
get_channel_name(function(name) {
channel_name = name;
});
// but here channel_name is still undefined
答案 2 :(得分:0)
您需要在函数范围外声明channel_name。但是,我不确定这会得到你想要的东西。这是为异步请求/响应设置的。您希望在handleJson()函数中执行使用通道名称的操作。
像这样:
var CHANNEL_NAME;
function trigger_gridly(){
get_channel_name();
}
function get_channel_name(){
$.getJSON(APPLICATION_DOMAIN + "channels/new.json?callback=?", null, handleJson);
}
function handleJson(channel){
CHANNEL_NAME = channel.name;
}