disucz源代碼理解:ajaxpost中的_attachEvent 後和submit誰先執行完的問題?

	var waitid = typeof waitid == 'undefined' || waitid === null ? showid : (waitid !== '' ? waitid : '');
	var showidclass = !showidclass ? '' : showidclass;
	var ajaxframeid = 'ajaxframe';
	var ajaxframe = $(ajaxframeid);
	var formtarget = $(formid).target;

	var handleResult = function() {
		alert('handleResult');
		var s = '';
		var evaled = false;

		showloading('none');
		try {
			if(BROWSER.ie) {
				s = $(ajaxframeid).contentWindow.document.XMLDocument.text;
			} else {
				if(BROWSER.safari > 0) {
					s = $(ajaxframeid).contentWindow.document.documentElement.firstChild.wholeText;
				} else {
					s = $(ajaxframeid).contentWindow.document.documentElement.firstChild.nodeValue;
				}
			}
		} catch(e) {s
			s = '內部錯誤,無法顯示此內容';
		}

		if(s != '' && s.indexOf('ajaxerror') != -1) {
			evalscript(s);
			evaled = true;
		}
		if(showidclass) {
			$(showid).className = showidclass;
		}
		if(submitbtn) {
			submitbtn.disabled = false;
		}
		if(!evaled && (typeof ajaxerror == 'undefined' || !ajaxerror)) {
			ajaxinnerhtml($(showid), s);
		}
		ajaxerror = null;
		if($(formid)) $(formid).target = formtarget;
		if(typeof recall == 'function') {
			recall();
		} else {
			eval(recall);
		}
		if(!evaled) evalscript(s);
		ajaxframe.loading = 0;
		$('append_parent').removeChild(ajaxframe);
	};
	if(!ajaxframe) {
		if (BROWSER.ie) {
			ajaxframe = document.createElement('<iframe name="' + ajaxframeid + '" id="' + ajaxframeid + '"></iframe>');
		} else {
			ajaxframe = document.createElement('iframe');
			ajaxframe.name = ajaxframeid;
			ajaxframe.id = ajaxframeid;
		}
		ajaxframe.style.display = 'block';
		ajaxframe.loading = 1;
		$('append_parent').appendChild(ajaxframe);
	} else if(ajaxframe.loading) {
		return false;
	}

	_attachEvent(ajaxframe, 'load', handleResult);

	showloading();
	$(formid).target = ajaxframeid;
	$(formid).action += '&inajax=1';
	$(formid).submit();
	if(submitbtn) {
		submitbtn.disabled = true;
	}
	for($i=0;$i<100;$i++)
	{
		alert($i);
	}
	doane();
	return false;

設置了彈出100次和load事件結束後,哪個先執行的?

驗證:  在上述代碼採用了手動提交的方式,當 iframe load 時間直接調用handleResult函數。


若代碼去掉  $(formid).submit();  然後把 1_1_member_login.tpl.php中的form 提交οnsubmit="return false"改爲return true;

1-猜想:先執行完100次alert($i)在執行handleResult;   原因是 執行onsubmit()->ajaxpost()函數後再提交。 出錯

2-驗證:失敗 ,與猜想不符。 與上次出現效果相同 沒有在ajaxpost執行後才提交

              1-1猜想:common.js沒有更新

              2-2驗證:更改瀏覽器chrome後得到想要的結果

出現如上問題 與 新建立的iframe有關係

 

chrome與firfox概念不一樣,上述代碼firfox調用兩次handleResult函數,chrome一次。


	function handle(){
		//document.write('aaa');
		alert('handle');
	}
	var e = document.getElementById('iframeName');
	_attachEvent(e, 'load', handle);
	$(formid).target = "iframe1";
	$(formid).submit();
	for(i=0;i<100;i++){
		alert(i);
	}
	

	return false;

驗證:無論是chrome還是firefox都是在執行完ajaxpost 全部語句再提交,$(formid).submit();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章