Ajax XHTTP请求不起作用

时间:2015-10-25 12:02:28

标签: javascript ajax xml

我已经被困在这一段暂时请帮忙。

我正在尝试执行XHTTP请求,解析? (是正确的术语)XML文档。请求不会进入myFunction(xml),我不知道为什么,它响应200 ok,所以应该没问题吧?

请求应检查XML以查找HTML表单中输入的电子邮件,并在发现时作出相应的响应。

任何帮助表示赞赏!!

以下Javascript:

<script type="text/javascript">

function loadDoc()
{
email = document.getElementById('email');
password = document.getElementById('password');

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() 
{
    if (xhttp.readyState == 4 && xhttp.status == 200) 
    {
        myFunction(xhttp);
    }
}
}
xhttp.open("POST", "customer.xml", true);
xhttp.send();

function myFunction(xml) 
{
var x, i, xmlDoc, txt;
xmlDoc = xml.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName("email");
for (i = 0; i < x.length; i++) 
{ 
    if (x[i].nodeValue == document.getElementById('email')) 
    {
        return (true);
        alert('Success, you have logged in!');
    }
    else
    {
        alert('Failed to log in');
        document.myForm.email.focus();
        return false;
    }
 }
}

</script>

XML:
<?xml version="1.0" encoding="UTF-8"?>
<customers>
<customer>
  <custid />
  <firstname />
  <lastname />
  <email />
  <password />
  <phone />
</customer>
<customer>
  <custid>562b5d237b599</custid>
  <firstname>1</firstname>
  <lastname>1</lastname>
  <email>1</email>
  <password>1</password>
  <phone>1</phone>
</customer>
<customer>
  <custid>562b62824e3f7</custid>
  <firstname>ben</firstname>
  <lastname>1</lastname>
  <email>1</email>
  <password>1</password>
  <phone>1</phone>
</customer>
<customer>
   <custid>562b63224b80f</custid>
  <firstname>ben</firstname>
  <lastname>ben</lastname>
  <email>ben@gmail.com</email>
  <password>ben</password>
  <phone>0266746374</phone>
</customer>
<customer>
  <custid>562b68ea06ed1</custid>
  <firstname>mark</firstname>
  <lastname>mark</lastname>
  <email>mark@gmail.com</email>
  <password>mark</password>
  <phone />
 </customer>
 </customers>

1 个答案:

答案 0 :(得分:2)

}
xhttp.open("POST", "customer.xml", true);
xhttp.send();

在这里,您尝试使用xhttp 外部创建它的函数。观察你放置}的位置(更加小心你的代码缩进会使这更明显)。

x[i].nodeValue == document.getElementById('email')

这永远不会成真。 getElementById将返回HTML元素节点,而不是字符串。大概你正在寻找.value

调试代码时,需要检查正在测试的值,看它们是否真正匹配。

else
{
    alert('Failed to log in');
    document.myForm.email.focus();
    return false;
}

并且在这里,如果第一个节点值不匹配,那么您立即return,这样您就不会测试任何其他节点。

您需要将失败的条件置于循环之外,这样只有在没有匹配时才触发。

当然,这个系统完全不安全,因为任何人都可以请求XML文件并读取其中的密码。