XMLRequest ResponseText为空

时间:2012-11-09 04:13:50

标签: javascript xmlhttprequest

我有一个JavaScript函数,如果它成功更新了数据库,或者它有错误,我想向用户报告一条警告消息。

在主要的X.JSP文件中,我有:

function startRequest(pChange)
        {

                //alert("startRequest");
                createXmlHttpRequest();
                //alert("sending message");
                //var u1=document.f1.user.value;
                //alert("Running startRequest for: " + pChange.id);
                //xmlHttp.open("GET","updateEntry.jsp&pID=pChange.id&pStatus=pChange.status&pAddress=pChange.address&pDate=pChange.date&pNotes=pChange.note&pAssigned=pChange.assigned" ,true)
                xmlHttp.open("GET","updateEntry.jsp?pID=" + pChange.id + "&pAddress=" +pChange.address + "&pStatus=" + pChange.status +"&pNote=" + pChange.notes +"&pAssigned=" +pChange.assigned ,true)
                //alert(xmlHttp.responseText);
                xmlHttp.onreadystatechange=handleStateChange;
                xmlHttp.send(null);           
        }
function handleStateChange()
        {
            //alert("handleStateChange");
            var message = xmlHttp.responseText;
            alert("Return Code:" + message);
            if(xmlHttp.readyState==4)
            {
                if(xmlHttp.status==200)
                {
                    //alert("test2");
                    //alert("recieved Message");
                    var message = xmlHttp.responseText;
                    alert(message);
                }
            }
            else
            {
                alert("Error loading page"+ xmlHttp.status +
            ":"+xmlHttp.statusText);
            }
        }

然后我在updateEntry.jsp中运行了一个方法,它执行了很多操作,但感兴趣的是这一部分:

if(nId.equals("NMI")||nId.equals("MI")||nId.equals("NI")||nId.equals("SA")||nId.equals("S"))
            {
                org.hibernate.Query query2 = session2.createQuery("update Leads set Status = :nstatus where Id = :nid");
                query2.setParameter("nid", nId);
                query2.setParameter("nstatus", nstatus);
                query2.executeUpdate();
                out.println("Update successfully with: " + nstatus);
                // Actual contact insertion will happen at this step
                session2.flush();
                session2.close();
            }
            else
            {   
                out.println("Status must be: NMI, MI, NI, SA or S");        
            }

我的理解是,如果函数成功完成,这应该只创建一个警报。相反,它创建了9个警报,所有警报都是空白的。我究竟做错了什么?我看到“返回代码:”消息和空白“”消息(两个不同的代码段),但都输出空白消息变量。

1 个答案:

答案 0 :(得分:0)

如果readystate不是4,那并不意味着它是一个错误。 Ajax有多个状态通知客户端正在发生的事情。您的代码说这些连接状态都是错误。

        if(xmlHttp.readyState==4)
        {
            if(xmlHttp.status==200)
            {
                //alert("test2");
                //alert("recieved Message");
                var message = xmlHttp.responseText;
                alert(message);
            }  <-- your else should most likely be up here
        }
        else  <-- this is incorrect
        {
            alert("Error loading page"+ xmlHttp.status +
        ":"+xmlHttp.statusText);
        } 

阅读MDN - Ajax Getting Started

上的文件