Javascript何时完成和函数使用
我试图在第三个函数中调用两个不同的函数,但一个接一个。一个函数具有ajax调用,其值在另一个函数中使用。这是一个循序渐进的过程。我不想用一个来代替另一个Javascript何时完成和函数使用,javascript,jquery,Javascript,Jquery,我试图在第三个函数中调用两个不同的函数,但一个接一个。一个函数具有ajax调用,其值在另一个函数中使用。这是一个循序渐进的过程。我不想用一个来代替另一个 function f1() { // ajax call return r1 } function f2(r2) { // do some of the work based on r2 } function f3() { $.when(f1()).done(function(data){
function f1()
{
// ajax call
return r1
}
function f2(r2)
{
// do some of the work based on r2
}
function f3()
{
$.when(f1()).done(function(data){
f2(data)
});
}
我还尝试了$.when().then();但还是没有用
提前谢谢
更新:-以下是基于@dreamweiver提供的解决方案对我的问题的答案
var json_data = '';
function f1()
{
$.ajax({
url: "test.php",
method: "POST",
async : false,
data: { },
success:function(data){
json_data = eval(data);
}
});
}
function f2(t)
{
console.log("values is "+t);
}
function f3()
{
$.when(f1()).done(function(){
f2(json_data);
});
}
谢谢大家的反馈。这应该是有效的:
function f1() {
// Or some other Ajax request that returns a promise
return $.getJSON('path/to/your/service');
}
function f2(r2) {
// ...
}
f1().done(f2);
试着这样做,我已经在本地进行了测试,效果非常好
function deferredCalls () {
var jsonData = '';
var f1 = function ()
{
// ajax call
$.ajax({
url: "test.html",
method: "POST",
data: { id : menuId }
}).done(function(data) {
jsonData = data; //set the data
});
}
var f2 = function (data)
{
// do some of the work based on data
if(!!data){
//process the data
}
}
$.when(f1).done(function(){
f2(jsonData);
});
}
首先调用
f1
函数,该函数将发出ajax请求并在成功时返回数据,该数据被设置为函数范围变量jsonData
。此过程完成后,将调用f2,f2将开始使用jsonData
,它只是从f1
函数调用接收到的数据。您是否尝试了$。何时(f1).完成(函数(数据){f2(数据)})
如果您使用的是jQuery的ajax()
,那么您应该能够做到:f1()。然后(f2)
。为什么需要f3函数?假设您想设定承诺,然后调用f1?您是否尝试过在调用f1
后删除()
?例如,$.when(f1).done(…
)-如果使用()
调用它,那么函数将立即执行。您可能应该做的是将其作为变量传递给jQuery执行later@James,我尝试了你的方法,但它显示“f1未定义”如果出现此错误,我将无法在其他一些函数中调用f1和f2。这不是问题,请将这些函数移到全局范围并保持其余函数不变。是否尝试将f1=func….
,f2=func….
的完整定义从deferredCalls()移到全局范围
?$。当
没有得到由$创建的承诺时。ajax。代码通常做的是:$。当
调用f1
时,f1
返回未定义,$。当
将其作为参数传递给对.done
的匿名回调时,这将调用f2
>jsonData尚未初始化(唯一的例外是ajax调用在f1中同步触发.done
)all@vanhelgen,说得对。它有时做同样的事情,有时显示为“未定义”