ajax是异步执行的 要不定时去检查是否执行完毕 要不设置成同步 要不放在回调里试试
解决方案 »
- 如何关闭打开的DIV
- onclick="document.getElementById('a1').src='yy.htm';" 没有点击之前,yy.htm 有没有被加载?
- File.DateLastModified究竟是什么?
- 可不可以用javaScript来防复制呀(在线等!!!)
- 请看这段代码
- 哪位兄台帮我测试一下下面的代码错在哪里?我这里为什么提示img1没有定义啊?
- 怎样隐藏Javascript代码呀??要急死我了
- 如何用Javascript来判断SQL的varchar类型为NULL????
- JavaScript迷惑问题之九:如何对URL进行编码?
- htttp://www.itfriend.cn 首页的动画效果如何实现的
- 求助这种JS怎么加载??
- firefox下js设置控件width百分比问题
简单点来说,就是使用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的用法,特别适合楼主多个请求数据完成后,一起处理的需求。
var _ajax = $.ajax;
$.ajax = function(url, data, callback) {
var id = Math.ceil(Math.random() * 1000000000);
$.ajax.queue[id] = id;
_ajax(url, data, function(d) {
$.ajax.queue[id] = null;
delete $.ajax.queue[id];
callBack(d);
});
}
$.ajax.queue = {};
楼主的题目要求的结果,很有可能是陷入金字塔厄运的一个陷阱,异步事件驱动模式很大的弊端就是会造成处理逻辑的碎片化,难以书写,难以控制,难以阅读,在这种模式下,再去加判断,基本就是一场灾难。
promise就是为了解决这个问题而产生的,现在很多都是用这个模式来书写异步代码。
----个人想法举例:加个setInterval事件,根据页面加载的效果去针对性的检测某个模块的ID是否完成
------代码:setInterval(test,500)
------------function test(){
--------------if($("#id1").val()!=null){
------------------写任意方法
----------------}
------------}
以上想法虽然可以实现,但需要针对页面效果去分析,我想找个通用的方法,这个方法可以任意在别的页面中调用。