进行非异步的YUI asyncRequest调用

时间:2010-01-11 13:47:43

标签: javascript yui

我想要进行YAHOO.util.Connect.asyncRequest调用,这不是异步的。就像open(method, url, async)一样,其中false由异步传递。

我在Connect类中找不到“syncRequest”。这是否可以使用YUI 2?

我试过没有YUI而是:

function createRequestObject() {
    var ro;
    // Mozilla, Safari,...
    if (window.XMLHttpRequest) {
        ro = new XMLHttpRequest();
        if (ro.overrideMimeType) {
            ro.overrideMimeType('text/xml');
            // See note below about this line
        }
        // IE
    } else if (window.ActiveXObject) {
        try {
            ro = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                ro = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!ro) {
        alert('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }
    return ro;
}
function sndReq(param,server,handler) {
    http = createRequestObject();
    http.open('GET', server+"?"+param, false);
    http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    http.onreadystatechange = handler;
    http.send(null);
}

但是在FireFox和Safari中,当'open'传递false时,不会在'onreadystatechange'上调用回调函数(handler)?在IE和Opera中它可以正常工作。

4 个答案:

答案 0 :(得分:2)

YUI3支持“YUI io”中的同步请求,可在GitHub上的开发主机上使用。实现语法包含在README文件中,并将正式记录在3.1.0中发布。此增强功能在yuilibrary.com上记录为2528181。

如果您可以使用YUI 3,请尝试一下。

答案 1 :(得分:1)

YUI2不支持同步请求。根据IRC的一位开发人员的说法,它最终将成为YUI3的一部分。尽管由于用户体验造成的破坏,他们并不急于支持它。

答案 2 :(得分:1)

使用JQuery。 jQuery.ajax({async:false})适用于IE和FF。

答案 3 :(得分:-1)

我个人永远不会发出同步请求。 AJAX用于异步请求。如果请求需要更长时间,则UI将冻结。