从AJAX请求中获取价值

这曾经是我的代码:

//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:在ajax调用成功后返回数据

和非常好的答案一样

https://stackoverflow.com/a/14220323/702353

并开始阅读Deferred和.done()等方法。 但是,我无法获得原始SJAX代码的相同结果。 所以我的问题是:

  • 是否可以使用AJAX请求执行我想要的操作?
  • 可以在不修改.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); } }); } 

谢谢你的时间!

这是需要做的:

 $("#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; } }); } 

第2部分的 答案对我帮助很大!