1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

AJAX 应用中的加载顺序问题

本帖由 不学无术2005-10-17 发布。版面名称:前端开发

  1. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    有脚本如下:

    代码:
    <script langauge="javascritp" type="text/javascript">
    <!--
    var objXML;
    
    function getXML(strURL) {
        var req = false;
    	var xml;
    	
        /*@cc_on @*/
        /*@if (@_jscript_version >= 5)
        // JScript gives us Conditional compilation, we can cope with old IE versions.
        // and security blocked creation of the objects.
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            try {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            }
        	catch (E) {
                req = false;
            }
        }
        @end @*/
        if (!req && typeof XMLHttpRequest != 'undefined') {
            req = new XMLHttpRequest();
        }
    	
    	/////////////////////////////////////////////////////////
    	
    	req.open("GET", strURL, true);
    	if (req) {
    	    req.onreadystatechange = function() {
    		    if (req.readyState == 4 && req.status == 200) {
    			    xml = req.responseXML;
    				alert(xml);
    				return xml;
    			}
    		}
    	}
    	req.send(null);
    }
    
    objXML = getXML("sorts.asp?action=list&ParentSort=0");
    
    alert(objXML);
    //-->
    </script>
    其中 sorts.asp?action=list&ParentSort=0 执行结果如下:

    HTML:
    <?xml version="1.0" encoding="utf-8"?><SORTS><SORT><ID>1</ID><TITLE>大类</TITLE></SORT></SORTS>
    可以不管它。

    在执行过程中,根据测试效果,首先显示了 alert(objXML) 的内容,然后才是 alert(xml) 。所以前者显示的是 undefined ,后者是 XMLObject 。也就是说在 getXML() 执行完成前,alert(objXML) 就执行了。

    不知道是不是在同步执行和异步执行的选择上出现问题,请指点一二。

    谢谢!
     
  2. wm_chief

    wm_chief New Member

    注册:
    2005-09-05
    帖子:
    17,890
    赞:
    46
    高手!改天向你请教ajax。
     
  3. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    考察了 vB 的中 AJAX 的应用,基本上都是在需要的时候运用 XMLHttpRequest 组件的。

    可能我的思路本身就是错的。

    这个也可能因为其应用中本身存在的 同步 和 异步 加载,就是晚于其它的脚本执行的。