我有一个foo发出Ajax请求的函数.我怎样才能从中回复foo?
我尝试从success回调中返回值,并将响应分配给函数内部的局部变量并返回该变量,但这些方法都没有实际返回响应.
function foo() {
var result;
$.ajax({
url: '...',
success: function(response) {
result = response;
// return response; // <- I tried that one as well
}
});
return result;
}
var result = foo(); // It always ends up being `undefined`.
Run Code Online (Sandbox Code Playgroud) 好几次,我遇到了使用Firebase的同步和异步功能的问题.我的问题通常是我需要在我编写的函数中进行异步Firebase调用.举个简单的例子,假设我需要计算和显示一个对象的速度,我的Firebase存储距离和时间:
function calcVelocity() {
var distance, time, velocity;
firebaseRef.once('value', function(snapshot) {
distance = snapshot.val().distance;
time = snapshot.val().time;
velocity = distance / time;
});
return velocity;
}
$("#velocity").html(calcVelocity());
Run Code Online (Sandbox Code Playgroud)
当然,上面的代码不起作用,因为firebaseRef.once()是异步调用,所以velocity当我们到达时还没有设置return velocity;.如果我们将回调函数置于return内部.on(),则根本不会返回任何内容.
一种解决方案是使我的calcVelocity()函数也异步.
另一种解决方案是存储同步读取但从Firebase异步更新的Firebase缓存版本.
这些解决方案中的一个比另一个好吗?还有更好的解决方案吗?
我需要一个带构造函数的图表原型,所以我写了这个:
function Chart(file) {
var chart = undefined
$.getJSON(file, function(data) {
chart = {
categories: data.keys
series: [{
name: 'first',
data: data.first
}, {
name: 'second',
data: data.second
}]
}
});
return chart
}
Run Code Online (Sandbox Code Playgroud)
然后我意识到,由于JaavScript的同步性,它会返回undefined.我应该如何表达退货声明Chart?
我有这个功能
function getTags(level){
$.getJSON("php/get-tags.php", { "parent": level }, function(json) {
return json;
});
}
Run Code Online (Sandbox Code Playgroud)
我把这个函数称为
$(function(){
var tags = getTags('0');
});
Run Code Online (Sandbox Code Playgroud)
问题是,在函数getTags()中返回json就像
{"tags":["Mathematics","Science","Arts","Engineering","Law","Design"]}
但是,在var tags = getTags('0')捕获返回值时,它会得到一个undefined值.
我返回值的方式不正确吗?
我在JavaScript中有以下方法:
function getData(){
var result;
$.getJSON("app/data/ptl", function (data) {
if (data == null) {
return false;
}
var x_data = new Array();
var y_data = new Array();
$.each(data, function(index, value) {
x_data.push(index);
y_data.push(value);
});
result = [months_data,value_data];
});
alert('');
return result;
}
Run Code Online (Sandbox Code Playgroud)
调用此方法时,将检索确切的数据.但是当我删除alert('')数据时没有收到.有谁知道这个问题的合理解释?