这曾经是我的代码:
//At "click" I retrieve value from myFunctionA and use it in myFunctionB
$("#myButton").click(function()
{
var response = myFunctionA();
if(response) myFunctionB(response);
});
//Inside myFunctionA I perform an AJAX call (you will see it's really and "SJAX")
function myFunctionA()
{
var response = myAjax();
return response;
}
//This is not really and AJAX because of the async:false
function myAjax()
{
var myJSON = {}
$.ajax({
url: "some_url.php",
dataType: "json",
async: false,
error: function(jqXHR, textStatus, errorThrown)
{
alert(errorThrown);
},
success: function(data, textStatus, jqXHR)
{
myJSON = data;
}
});
return myJSON;
}
事情就是以上工作得很好。我请求一个值,等待它,然后在我需要的地方使用它。显然SJAX部分不应该完成,我必须做一个真正的AJAX请求。因此,当我在寻找一种方法来实现这一点时,我偶然发现了诸如
之类的问题jQuery: Return data after ajax call success
非常好的答案,如
https://stackoverflow.com/a/14220323/702353
并开始阅读有关Deferred和.done()
等方法的内容。但是,我无法获得原始SJAX代码的相同结果。所以我的问题是:
.click()
代码的情况下完成吗?以下是我正在处理的当前代码
$("#myButton").click(function()
{
var response = myFunctionA();
if(response) myFunctionB(response);
});
function myFunctionA()
{
$.when(myAjax()).done(function(response)
{
return response;
});
}
function myAjax()
{
return $.ajax({
url: "someurl.php",
dataType: "json",
error: function(jqXHR, textStatus, errorThrown)
{
alert(errorThrown);
}
});
}
谢谢你的时间!
答案 0 :(得分:0)
这是需要做的事情:
$("#myButton").click(function()
{
$.when(myFunctionA()).done(function(response)
{
myFunctionB(response);
});
});
function myFunctionA()
{
var dfd = new jQuery.Deferred();
$.when(myAjax()).done(function(data, textStatus, jqXHR)
{
dfd.resolve(data);
});
return dfd.promise();
}
function myAjax()
{
return $.ajax({
url: "someurl.php",
dataType: "json",
error: function(jqXHR, textStatus, errorThrown)
{
alert(errorThrown);
},
success: function(data, textStatus, jqXHR)
{
return data;
}
});
}