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(); 
} 
相关问题