2010-04-29 38 views
1

由于某种原因,该功能与firefox一起冻结,直到它完全从请求的站点检索到流。有没有防止冻结的机制,所以它按预期工作?Firefox扩展功能正在冻结Firefox,直到请求完成

在XUL

<statusbarpanel id="eee_label" tooltip="eee_tooltip" 
     onclick="eee.retrieve_rate(event);"/> 

的Javascript

retrieve_rate: function(e) 
{ 
    var ajax = null; 
    ajax = new XMLHttpRequest(); 
    ajax.open('GET', 'http://site.com', false); 
    ajax.onload = function() 
    { 
    if (ajax.status == 200) 
    { 
    var regexp = /blabla/g; 
    var match = regexp.exec(ajax.responseText); 
    while (match != null) 
    { 
    window.dump('Currency: ' + match[1] + ', Rate: ' 
          + match[2] + ', Change: ' + match[3] + "\n"); 
    if(match[1] == "USD") 
     rate_USD = sprintf("%s:%s", match[1], match[2]); 
    if(match[1] == "EUR") 
     rate_EUR = sprintf("%s:%s", match[1], match[2]); 
    if(match[1] == "RUB") 
     rate_RUB = sprintf("%s/%s", match[1], match[2]); 
    match = regexp.exec(ajax.responseText); 
    } 

    var rate = document.getElementById('eee_label'); 
    rate.label = rate_USD + " " + rate_EUR + " " + rate_RUB; 
    } 
    else 
    { 

    } 
    }; 
    ajax.send(); 

我试图把window.dump()ajax.send()之后,它的控制台还甩请求完成后。

回答

4

您需要通过传递true作为ajax.open的最后一个参数来发出异步AJAX请求。

请注意,一旦你这样做,send函数将立即返回,并且之后的任何代码将在请求完成之前运行。

+0

确切的,谢谢! – Pablo 2010-04-29 14:27:16