Xay*_*Xay 5 javascript ajax jquery
如果可以并且认为它是合适的,那么除了进行同步AJAX调用之外,处理这样的事情的最佳方法是什么?
var A = getDataFromServerWithAJAXCall(whatever);
var B = getDataFromServerWithAJAXCallThatDependsOnPreviousData(A);
var C = getMoreDataFromServerWithAJAXCall(whatever2);
processAllDataAndShowResult(A,B,C);
Run Code Online (Sandbox Code Playgroud)
假如我可以通过回调来这些功能,我知道我可以使用关闭和lambda表达式来得到这样做的工作:
var A,B,C;
getDataFromServerWithAJAXCall(whatever, function(AJAXResult) {
A= AJAXResult;
getDataFromServerWithAJAXCallThatDependsOnPreviousData(A, function(AJAXResult2) {
B= AJAXResult2;
processAllDataAndShowResult(A,B,C);
});
});
getMoreDataFromServerWithAJAXCall(whatever2, function(AJAXResult) {
C= AJAXResult;
processAllDataAndShowResult(A,B,C);
});
function processAllDataAndShowResult(A,B,C) {
if(A && B && C) {
//Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
但它对我来说感觉不对或不够干净.那么有更好的方法或至少更简洁的方式来做同样的事情,还是只是我不习惯javascript函数式编程?
顺便说一下,如果有帮助的话,我正在使用jQuery(1.4.2).
谢谢.
是的,jQuery的Deferred Object非常方便.
以下是$.when()功能文档中的示例,说明了您的问题的解决方案:
$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1, a2){
/* a1 and a2 are arguments resolved for the
page1 and page2 ajax requests, respectively */
var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
if ( /Whip It/.test(jqXHR.responseText) ) {
alert("First page has 'Whip It' somewhere.");
}
});
Run Code Online (Sandbox Code Playgroud)
干杯!
如果您可以使用 jQuery 1.5,您应该能够通过使用延迟对象来满足您的需求$.when()
$.when(getDataFromServerWithAJAXCall("Call 1"), getMoreDataFromServerWithAJAXCall("Call 2")).done(function(a1, a2) {
var jqXHR = a1[2];
jqXHR.responseText;
getDataFromServerWithAJAXCallThatDependsOnPreviousData(jqXHR.responseText);
});
Run Code Online (Sandbox Code Playgroud)
简单地说,当前两个函数完成后,它将执行第三个函数。
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |