【问题标题】:jquery using $.deferredjquery 使用 $.deferred
【发布时间】:2011-12-16 14:28:42
【问题描述】:

我正在使用 jQuery $.when 函数来同步我拥有的两个 $.getJSON 异步调用。合并来自两个调用的数据现在可以正常工作,但是我想返回 merge 的内容,它是一个 jQuery 对象数组。

我正在尝试使用包裹在另一个函数中的$.when 函数来实现这一点,该函数包含我同步异步调用的代码。我的代码如下所示:

 $.fn.getResultFromMergedJsonCalls = function(params){
    $.when( 
    $.fn.jsonCall1(params), $.fn.jsonCAll2(params)
     ).then(function(){
       var mergedData = mergeResults(resultOfJsonCAll1,resultOfJsonCAll2)
           return mergedData;
    });
   };
)

如何将mergedData 数组的内容返回给调用函数,我知道异步调用的性质导致了这种行为,所以我只需要一个解决问题的模式。谢谢。

【问题讨论】:

  • 你不能。它是异步的。您必须在传递给.then 的回调中处理结果,或者将其传递给从回调内部调用的函数。
  • 你通常不会直接调用$.fn函数。

标签: jquery jquery-deferred


【解决方案1】:

将回调函数传递给 getResultsFromMergedJsonCalls,然后从 then 处理程序调用回调。例如:

$.fn.getResultFromMergedJsonCalls = function(params, success){
$.when( 
$.fn.jsonCall1(params), $.fn.jsonCAll2(params)
 ).then(function(){
   if (success) {
       var mergedData = mergeResults(resultOfJsonCAll1,resultOfJsonCAll2);
       success(mergedData);
});

};

getResultsFromMergedJsonCalls 的调用者当然必须实现一个合适的函数来作为新的回调参数传递。

【讨论】:

    【解决方案2】:

    这是异步的;不能退货。

    相反,您需要使用回调将值传回。

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多