事件后退出功能

时间:2011-07-10 09:32:32

标签: javascript function titanium onload onload-event

我想拥有自己的初始化函数,我希望它只在onload事件之后退出,我能为它做些什么?

var qqq=0;
function init(){
    var requestClient= Ti.Network.createHTTPClient();
    requestClient.open('GET','https://mysite.com/api/123/id/5/friends');
        requestClient.onload = function() {
            alert('loaded');
        };
    requestClient.send();
};
init();
alert(qqq);

1 个答案:

答案 0 :(得分:2)

好吧,你可以通过使请求同步而不是异步来做到这一点。这会对用户的浏览体验产生令人不快的副作用,在请求期间趋于锁定,但如果将open的第三个参数设置为false,则会使其同步而不是异步:

var qqq=0;
function init(){
    var requestClient= Ti.Network.createHTTPClient();
    requestClient.open('GET','https://mysite.com/api/123/id/5/friends', false);
                                                           // Here------^
        requestClient.onload = function() {
            alert('loaded');
        };
    requestClient.send();
};
init();
alert(qqq);

同步请求将使页面上的JavaScript执行(至少在许多浏览器中而不仅仅是JavaScript中)暂停,直到网络操作完成。

通常的做法是让你的init接受你在onload处理程序中调用的回调,因为这会带来更好的用户体验:

var qqq=0;
function init(callback){  // <== Accept a callback
    var requestClient= Ti.Network.createHTTPClient();
    requestClient.open('GET','https://mysite.com/api/123/id/5/friends');
        requestClient.onload = function() {
            alert('loaded');
            callback();   // <== Call the callback
        };
    requestClient.send();
};
init(function() {         // <== Pass the callback into `init`
    alert(qqq);
});

有效的网络编程是关于接受事件驱动的本质。我强烈推荐第二个例子。