2011-11-12 49 views
0

其實,我有2個問題:以下2個代碼片段沒有問題;XUL或mozBackgroundRequest中的jQuery Ajax?

第一個片段是jQuery ajax請求。即使它是跨域請求,它也可以工作。我的第一個問題是,同樣的原產地政策發生了什麼變化,爲什麼這樣工作?

var jsLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]. 
       getService(Components.interfaces.mozIJSSubScriptLoader); 

    jsLoader.loadSubScript("chrome://yuceel/content/jquery-1.6.2.js"); 

    jQuery.noConflict(); 

    jQuery.post("http://example.com/xMessages/index.php/main/ajax_get_something", 
    { "p1":"parameter1","p2":"parameter2"}, 
    function(data){ 
     alert(data); 
    }); 

第二個片段是XMLHttpRequest。我一直在使用它,但我不知道哪一個有更多的表現?對於小文本內容,我的應用程序將每3秒執行一次請求。我應該更喜歡使用jQuery Ajax而不是這個嗎?

postRequest:function(url, params, onload, onerror){ 
     var xhr = null; 
     try { 
      xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(); 
      xhr.mozBackgroundRequest = true; 
      xhr.onload = function(event) {onload(xhr);} 
      xhr.onerror = function(event) {onerror(xhr);} 
      xhr.open('POST', url, false); 
      xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
      xhr.send(Server.urlencode(params)); 
     } catch (e) { 
      onerror(xhr); 
     } 
     return xhr; 
} 

回答

1

附加組件沒有同源策略 - 它們具有系統權限並被允許使用任何東西。

jQuery.post()不是魔術,它只是一個圍繞XMLHttpRequest的包裝。所以它會做與XMLHttpRequest幾乎相同的事情,所以性能幾乎相同。唯一的區別是mozBackgroundRequest但這只是防止安全對話 - 與性能無關。