从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部分的 答案对我帮助很大!