onreadystatechange仅在被alert()

时间:2015-11-03 21:10:37

标签: javascript jquery internet-explorer xmlhttprequest contextmenu

我有一个简单的javascript html文件,我用它来执行从我添加到Internet Explorer默认上下文菜单(通过Windows注册表)的菜单项调用的函数。单击菜单会触发以下javascript:

<script type="text/javascript">
 var req = new ActiveXObject("Microsoft.XMLHTTP") 
 req.onreadystatechange = function() {

 if (req.readyState == 4) {
        if (req.status == 200) {
            var serverResponse = req.responseText;
            alert(serverResponse); // Shows "15"
        }
     }
 };

 req.open("POST", "https://www.googleapis.com/urlshortener/v1/url?key=myAPIkey", true)
 req.setRequestHeader("Content-Type","application/json")
 req.send('{"longUrl": "https://bing.com"}')

</script>

如果我通过在IE中打开html文件来运行它,它可以正常工作。我收到了回复文字。但是,如果我通过Context Menu加载它,则永远不会调用“onreadystatechange”函数。

如果我在脚本的末尾添加“alert(”test“),那么稍后会通过serverResponse警报弹出测试警报。我认为它与警报阻止或强制执行浏览器做一些事情,但我无法弄清楚为什么它作为一个页面加载,但不是通过上下文菜单。

我应该注意脚本的其余部分会被调用,所以我知道菜单项正在运行。

修改

上面的代码片段运行并显示一个警告对话框,其中包含服务器响应的文本,只要它作为html页面执行。如果通过上下文菜单执行,我永远不会得到“alert(serverResponse)”。

但是,从上下文菜单调用时,以下版本可以正常工作:

<script type="text/javascript">
 var req = new ActiveXObject("Microsoft.XMLHTTP") 
 req.onreadystatechange = function() {

 if (req.readyState == 4) {
        if (req.status == 200) {
            var serverResponse = req.responseText;
            alert(serverResponse); // Shows "15"
        }
     }
 };

 req.open("POST", "https://www.googleapis.com/urlshortener/v1/url?key=myAPIkey", true)
 req.setRequestHeader("Content-Type","application/json")
 req.send('{"longUrl": "https://bing.com"}')

 alert("test")

</script>

唯一的区别是在最后包含“警告(”测试“)”行

0 个答案:

没有答案