日期:2014-05-16  浏览次数:20810 次

初学AJAX。。XMLHTTPresponseText问题 - Web 开发 / Ajax
程序一运行到xmlhttpresponseText就停了,,下一句执行不了,为什么呢?
写最基本的注册页面

HTML code
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="regest.aspx.cs" Inherits="regest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script language="javascript" type="text/javascript">
        function checkName() {
            var xmlhttp;
            if (window.XMLHttpRequest) {
               xmlhttp = new XMLHttpRequest();
            }
           else {
               xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
           }
           var name = document.getElementById("userName").value;
           if (name == null) {
               alert("用户名为空");
               return;
           }
           var url = "Default.aspx?name="+escape(name);
           
           xmlhttp.onreadystatechange = function () {
               if (xmlhttp.readyState == 4) {
                   document.getElementById('span1').innerHTML = xmlhttp.responseText;
                   alert("用户名为空!");
               }
           }
           xmlhttp.open("POST", url, true);
           xmlhttp.send(null);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     <table>
      <tr>
       <td align="center">新用户注册</td>
      </tr>
      <tr>
       <td>
        <input type="text" name="username" id="username" onchange="checkName()"; />
       </td>
       <td>
        <span id="span1"></span>
       </td>
      </tr>
     </table>
    </div>
    </form>
</body>
</html>

Defualt.aspx.cs里面的
C# code
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {

        string name = Request["name"];
                if (name == "sss")
                {
                    Response.Write("测试成功");
                }
        }

    
}


------解决方案--------------------
if (xmlhttp.readyState == 4)
改为
if (xmlhttp.readyState == 4 && status == 200)
另外看一下是否是跨域了,最好的方法是打开firefox(要用firebug)或者chrome,在审查元素的网络一项看发出的请求和对应的响应分别是怎样。

------解决方案--------------------
xmlhttp.readyState 正常到4没有 。
逐步排查下 。
------解决方案--------------------
if (xmlhttp.readyState == 4)
改成
 if (xmlhttp.readyState==4 && xmlhttp.status==200)

另外 var url = "Default.aspx?name="+escape(name);

内容不多,而且name的值不需要保密的话,用get方法
返回值的速度要快些



------解决方案--------------------
xmlhttpresponseText 在代码中没有吧。
还有。
你提交的方式是用post的话,是要设置头的。
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
建议改为get方法。
------解决方案--------------------
不是提交大文件或密码之类的就用get方法较好。
------解决方案--------------------