在构建 Firefox 扩展时,我有一个对话框,当用户点击“确定”按钮时调用 Javascript 函数。该函数如下所示:
var acceptSubscribeHttpReq = null;
function acceptSubscribe(url) {
acceptSubscribeHttpReq = new XMLHttpRequest();
acceptSubscribeHttpReq.onload = httpLoadedSubscribe;
acceptSubscribeHttpReq.onerror = httpErrorSubscribe;
try {
acceptSubscribeHttpReq.open("GET", url, true);
acceptSubscribeHttpReq.send(null);
} catch(e) {
acceptSubscribeHttpReq.abort();
return false;
}
// alert("request.status = "+acceptSubscribeHttpReq.status);
return true;
}
有趣的是,如果我使用同步发送(通过将 open 的第三个参数设置为 false),或者如果我在函数末尾取消注释警报,这可以正常工作。但是,如果我在不取消注释警报的情况下使用异步,那么这会默默地失败——我按预期从这个函数返回,但 onload 处理程序永远不会触发。
这似乎表明 XMLHttpRequest 对象在函数退出时被销毁。那是对的吗?发生这种情况是因为这是从按钮调用的吗?如果是这样,可能的解决方案是什么?如果不是这样,知道为什么会发生这种情况吗?
这是对话框的 XUL:
<dialog id="winMain" title="&settingWindow.title;" style="min-width:400px;"
onload="initSubscribe();" ondialogaccept="return acceptSubscribe();"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
任何和所有的帮助表示赞赏!