【问题标题】:Chrome extension- creating a javascript XMLHttpRequest at a function that is called back on 'onclick'Chrome 扩展 - 在“onclick”回调的函数上创建 javascript XMLHttpRequest
【发布时间】:2011-02-15 17:40:46
【问题描述】:

我有以下问题: 我正在尝试为使用上下文菜单的 chrome 扩展编写 javascript 代码。

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 请求。由于某种原因,这不起作用。 怎么了? 谢谢, 玛丽

【问题讨论】:

  • 什么不起作用?您的警报显示15,这是不正确的吗?并且不要使用同步的XMLHttpRequest,而是使用异步的(使用true 作为xhReq.open 的第三个参数)并使用回调处理程序。
  • 将其更改为true,现在它发送一个没有内容的空警报,您是什么意思使用回调处理程序?原始代码向 flickr 搜索照片发送 http 请求。
  • 您是否遇到异常,例如声明协议和域不匹配的异常?

标签: javascript xmlhttprequest contextmenu google-chrome-extension


【解决方案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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2018-05-25
    • 2011-06-08
    • 1970-01-01
    • 2013-11-18
    • 2013-01-11
    相关资源
    最近更新 更多