1

我想拥有自己的初始化函数,并且我希望它仅在 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);
4

1 回答 1

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);
});

有效的网络编程就是要接受它的事件驱动性质。我强烈推荐第二个例子。

于 2011-07-10T09:41:02.077 回答