Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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_Ajax_Xmlhttprequest_Xmlhttprequest States - Fatal编程技术网

Javascript 响应文本比较

Javascript 响应文本比较,javascript,ajax,xmlhttprequest,xmlhttprequest-states,Javascript,Ajax,Xmlhttprequest,Xmlhttprequest States,我正在练习AJAX,因为我编写了一个代码来从服务器中的文件中获取文本,如果文本为“0”,则打印“0”,如果错误打印“未连接”,则打印“1”。但是有些地方出了问题,不知道是什么,即使连接了也没有连接 代码如下: <html> <head> <title>LogIN</title> <script> function verify() { var xml; if (win

我正在练习AJAX,因为我编写了一个代码来从服务器中的文件中获取文本,如果文本为“0”,则打印“0”,如果错误打印“未连接”,则打印“1”。但是有些地方出了问题,不知道是什么,即使连接了也没有连接

代码如下:

<html>
<head>
<title>LogIN</title>
<script>
function verify()
            {           
            var xml;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xml=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xml=new ActiveXObject("Microsoft.XMLHTTP");
  }
   xml.onreadystatechange=function()
       {
       if (xml.readyState==4 && xml.status==200)
        {
            var res=xml.responseText();
            if(res.equals("0"))
            {
                document.write("zero");
            }
            else
            {
            document.write("one");
            }
        }
        else
            document.write("Not connected");
        }
  xml.open("GET", "log_verify.txt", true);
  xml.send();
}
function login()
{
//action to login
}
</script>
</head>
<body>
<form>
User name : <input type="text" name="uname" onblur="verify()">
<br>
Pwd    : <input type="password" name="passwd" >
<br>
<input type="button" name="Login" value="Login" onclick="login()">
</form>
</body>
</html>

登录
函数验证()
{           
var-xml;
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xml=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xml=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
xml.onreadystatechange=function()
{
if(xml.readyState==4&&xml.status==200)
{
var res=xml.responseText();
如果(res.equals(“0”))
{
文件。写入(“零”);
}
其他的
{
文件。填写(“一份”);
}
}
其他的
文件。书写(“未连接”);
}
open(“GET”、“log\u verify.txt”、true);
xml.send();
}
函数登录()
{
//登录操作
}
用户名:

Pwd:
将输出作为

未连接未连接未连接未连接

但当我只显示响应文本时,它会按照下面的代码正确打印

<html>
<head>
<title>LogIN</title>
<script>
function verify()
            {           
            var xml;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xml=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xml=new ActiveXObject("Microsoft.XMLHTTP");
  }
   xml.onreadystatechange=function()
  {
  if (xml.readyState==4 && xml.status==200)
    {
       document.getElementById("myDiv").innerHTML+=xml.responseText;
    }
  } 
  xml.open("GET", "log_verify.txt", true);
  xml.send();
}
function login()
{
//action to login
}
</script>
</head>
<body>
<form>
User name : <input type="text" name="uname" onblur="verify()">
<br>
Pwd    : <input type="password" name="passwd" >
<br>
<input type="button" name="Login" value="Login" onclick="login()">
</form>
<div id="myDiv"><h2>Response text:</h2></div>
</body>
</html>

登录
函数验证()
{           
var-xml;
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xml=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xml=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
xml.onreadystatechange=function()
{
if(xml.readyState==4&&xml.status==200)
{
document.getElementById(“myDiv”).innerHTML+=xml.responseText;
}
} 
open(“GET”、“log\u verify.txt”、true);
xml.send();
}
函数登录()
{
//登录操作
}
用户名:

Pwd:
答复案文:
将输出作为

答复案文:

0

是javascript编码中的问题还是服务器响应中的问题

    else
        document.write("Not connected");
每当状态改变时执行,并且状态不是
4
200
。它不一定意味着
未连接
。你可以把那部分去掉。当状态从
0
变为
1
变为
2
变为
3
(和
4
,但这不会转到
else

其次,您使用的是
.equals
,但此函数本机不可用,而且您也没有定义它。您正在寻找:

 if(res == "0")
=
是相等运算符。以及

res = xml.responseText;
它不是一个函数,因此您不应该先附加
()

    else
        document.write("Not connected");
每当状态改变时执行,并且状态不是
4
200
。它不一定意味着
未连接
。你可以把那部分去掉。当状态从
0
变为
1
变为
2
变为
3
(和
4
,但这不会转到
else

其次,您使用的是
.equals
,但此函数本机不可用,而且您也没有定义它。您正在寻找:

 if(res == "0")
=
是相等运算符。以及

res = xml.responseText;
它不是一个函数,因此您不应该附加
()

问题#1 在您编写的第一个代码段中,
xml.responseText()
,这会导致脚本终止

在第二个代码段中,您答对了,并编写了
xml.responseText
。它是文本属性,不是函数


问题2 关于“未连接”消息,没有问题

您已经假设,当触发
onreadystatechange
时,如果连接,则为
(xml.readyState==4&&xml.status==200)
,如果未连接,则为相反

但事实并非如此

在XMLHttpRequest的生命周期内,如果连接成功,
onreadystatechange
会多次激发,在请求进行时跟踪对象的各种状态

以下列出了这些状态(将其值借给
.readyState
):

  • 未发送
    (数值0)

    对象已被构造

  • 打开
    (数值1)

    已成功调用open()方法。在这种状态下 可以使用setRequestHeader()和请求 可以使用send()方法创建

  • 收到的标题
    (数值2)

    所有重定向(如果有)都已遵循,并且 已收到最后答复。委员会若干成员的答复 对象现在可用

  • 加载
    (数值3)

    正在接收响应实体主体

  • 完成
    (数值4)

    数据传输已完成或出现问题 在传输过程中(例如无限重定向)

仅当对象进入
DONE
状态时,才使用条件执行代码,而不是因为任何其他状态都表示失败

完成状态有一个关联的错误标志,指示某种类型的网络错误或中止。它可以是true或false,初始值为false

如果要查找此故障,请检查
.state
属性:

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

因此:

问题1 在您编写的第一个代码段中,
xml.responseText()
,这会导致脚本终止

在第二个代码段中,您答对了,并编写了
xml.responseText
。是的