1

我有以下問題: 我想寫一個JavaScript代碼的鉻擴展使用上下文菜單。Chrome擴展 - 創建一個javascript的XMLHttpRequest在一個函數被回調'onclick'

var id = chrome.contextMenus.create({"title": "search Flickr", "contexts":"selection","onclick":searchSelection}); 

function searchSelection(info,tab){ 
var xhReq = new XMLHttpRequest(); 
xhReq.open("GET", "sumGet.phtml?figure1=5&figure2=10", false); 
xhReq.send(null); 
var serverResponse = xhReq.responseText; 
alert(serverResponse); // Shows "15" 

} 

正如你所看到的,我試圖在這個函數中創建一個http請求。由於某種原因,這是行不通的。 有什麼問題? 謝謝, 瑪麗

+1

什麼不行?你的警報顯示`15`,這是不正確的?不要使用同步的`XMLHttpRequest`,而使用異步的(使用`true`作爲`xhReq.open`的第三個參數)並使用回調處理程序。 – 2011-02-14 17:29:56

回答

1

它總是更好地使用異步XMLHttpRequest,同步調用將阻止瀏覽器,這可能會導致不良的用戶體驗。

對於異步請求,您必須使用回調處理程序,因爲沒有它,您將無法獲得responseText。當你做這樣的事情時它工作:

function searchSelection(info,tab){ 
    var xhReq = new XMLHttpRequest(); 
    xhReq.open("GET", "sumGet.phtml?figure1=5&figure2=10", true); 
    xhReq.onreadystatechange = function() { 
     if (xhReq.readyState == 4) { 
      if (xhReq.status == 200) { 
       var serverResponse = xhReq.responseText; 
       alert(serverResponse); // Shows "15" 
      } 
     } 
    }; 
    xhReq.send(); 
} 
相關問題