Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不是';是否显示此警报()?_Javascript_Internet Explorer_Xmlhttprequest_Alert - Fatal编程技术网

Javascript 为什么不是';是否显示此警报()?

Javascript 为什么不是';是否显示此警报()?,javascript,internet-explorer,xmlhttprequest,alert,Javascript,Internet Explorer,Xmlhttprequest,Alert,我有以下代码: // setup the AJAX request var pageRequest = false; if(window.XMLHttpRequest) pageRequest = new XMLHttpRequest(); else if(window.ActiveXObject) pageRequest = new ActiveXObject("Microsoft.XMLHTTP"); // callback pageRequest.onreadystatechan

我有以下代码:

// setup the AJAX request
var pageRequest = false;
if(window.XMLHttpRequest)     pageRequest = new XMLHttpRequest();
else if(window.ActiveXObject) pageRequest = new ActiveXObject("Microsoft.XMLHTTP");

// callback
pageRequest.onreadystatechange = function() {

    alert('pageRequest.readyState: ' + pageRequest.readyState
        + '\npageRequest.status: ' + pageRequest.status);
}

pageRequest.open('POST','ajax.php',true);

// q_str contains something like 'data=value...'

pageRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
pageRequest.setRequestHeader("Content-length", q_str.length);
pageRequest.setRequestHeader("Connection", "close");

pageRequest.send(q_str);
这在Chrome上运行良好,但IE被它卡住了,吐出了一个“未指定的错误”,它指向了带有alert()的行。为什么它不能显示警报

编辑:好的,在我关闭错误对话框后,我得到了预期的三个警报

编辑:现在它真的变得很奇怪了。如果我改变

alert('pageRequest.readyState: ' + pageRequest.readyState
        + '\npageRequest.status: ' + pageRequest.status);


然后它工作了,我收到5个警报。(1,1,2,3,4)

状态是HTTP响应。在调用方法的前两次时,返回1和1作为readyState。readyState 1表示。当时,服务器没有收到任何请求,因此在警报中使用status会导致错误,因此服务器没有收到任何状态响应

Chrome4也会引发错误(无效状态错误:DOM异常11)。如果打开Chrome Javascript控制台,您将看到错误

Firefox3.6也会引发一个错误,但似乎会自动放弃它(在错误控制台中不可见)。如果将函数包装在
try..catch
块中,您将看到错误消息(组件返回的故障代码:0x80040111(NS\u错误\u不可用)):

前两次
onreadystatechange
在Internet Explorer中被调用,
readyState
为1(打开)。在此状态下,正在发送请求,但尚未收到响应。调用此
readyState
中的
status
属性时引发错误,因为没有HTTP响应来读取状态

此行为与的旧版本兼容,其中说明:

如果
状态
属性不可用 如果可用,则必须引发异常。 当
readyState
是3(接收)还是4(加载)。什么时候 如果可用,则它必须表示HTTP 状态代码(通常为200表示一个 成功连接)

检索异常

如果访问此属性,则应引发DOMException
INVALID\u STATE\u ERR
当readyState的值不合适时

但是,说明
status
必须始终返回一个值:

status
属性必须返回 运行这些步骤的结果:

  • 如果状态为未发送或已打开,则返回0并终止这些步骤
  • 如果错误标志为true,则返回0并终止这些步骤
  • 返回HTTP状态代码

  • 我认为在计算PageRequest.status(是一个整数)时,存在字符串连接问题。试试这个:

    status = pageRequest.status;
    status += '';
    alert('pageRequest.readyState: ' + pageRequest.readyState \
    + '\npageRequest.status: ' + status);
    

    您确定pageRequest的构造正确吗?如果您在本地运行此程序,IE默认情况下拒绝使用ActiveX到本地页面…我在本地Web服务器上运行此程序;在你的}之后。也许这是相关的。感谢您最终解释了此警报产生错误的原因。我想知道为什么它能在Chrome和FF中工作…[话题外]看到报纸上的Clippy头像,却没有以“看起来你在尝试…”开头的答案,我有点失望:(在内心深处,每个人都喜欢Clippy。)这与字符串连接无关。
    string+integer
    的结果是将
    integer
    转换为字符串,然后将其连接起来。此外,Javascript不需要对连续行进行转义。第三行末尾的反斜杠只会导致语法错误(无效字符)好的。是的,我有点忘记了Chrome中的错误控制台。它也会弹出修改标题的错误,所以我忽略了控制台。我的错。
    pageRequest.onreadystatechange = function() {
      try {
        alert('pageRequest.readyState: ' + pageRequest.readyState
              + '\npageRequest.status: ' + pageRequest.status);
      }
      catch (e) { 
        alert(e); 
      }
    }
    
    status = pageRequest.status;
    status += '';
    alert('pageRequest.readyState: ' + pageRequest.readyState \
    + '\npageRequest.status: ' + status);