我想拥有自己的初始化函数,我希望它只在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);
答案 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);
});
有效的网络编程是关于接受事件驱动的本质。我强烈推荐第二个例子。