日期:2014-05-16  浏览次数:20495 次

Js加载完后执行的JS
各位看官,题目如下:

页面中有多个ajax请求及其众多js方法。而我想写个js要求所有的ajax数据加载完后,以上说有的js方法都执行完后在执行。



------解决方案--------------------
引用:
Quote: 引用:

可以使用promise设计模式。
简单点来说,就是使用jquery中的defferd对象来处理你这个问题。
在jquery1.5.0之后就引入了defferd对象。
以下是类似楼主问题的demo,多个请求结果一起处理。

$.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.
  // Each argument is an array with the following structure: [ data, statusText, jqXHR ]
  var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It"
  if ( /Whip It/.test( data ) ) {
    alert( "We got what we came for!" );
  }
});


详细请参考:
http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html
这个地方介绍了defferd对象的基础。
http://api.jquery.com/jQuery.when/
这个地方说明了when的用法,特别适合楼主多个请求数据完成后,一起处理的需求。

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).then(myFunc, myFailure);


楼上改进的结果是正解,myFunc就是楼主要求的增加的一个js方法,myFunc方法会在所有的ajax请求成功后调用,在myFunc函数内部,楼主可以调用已有的函数。
------解决方案--------------------
引用:
题目要求:不允许改动已有的js方法,增加一个JS方法,这个JS方法可以判定以上的JS都加载完成(包括AJAX异步请求的执行方法)


楼主的题目要求的结果,很有可能是陷入金字塔厄运的一个陷阱,异步事件驱动模式很大的弊端就是会造成处理逻辑的碎片化,难以书写,难以控制,难以阅读,在这种模式下,再去加判断,基本就是一场灾难。
promise就是为了解决这个问题而产生的,现在很多都是用这个模式来书写异步代码。