1

我尝试使用谷歌找到这个问题,但到目前为止没有运气,所以我寻求帮助。我正在使用 JSP 上的网页,并且我对 ajax responseText 有一点问题,我在 firefox 上测试页面并使用 firebug。问题在于操作正确完成并且响应文本在萤火虫控制台上显示正常,但它没有显示在<div>我分配的。当我在处理 onreadystatechange 的函数中放置一个 alert() 时,它会正确显示,好像响应为时已晚,所以我有点迷失了。谁能给我一个想法?

我处理提交的 JS 是

function validate( form ) {
var expresion = /[\b\W\d]+/;
var error=0;
var nombre = document.getElementById("Addname");
var descripcion = document.getElementById("Adddescripcion");
if(nombre.value == "" ){
    nombre.focus();
    nombre.style.backgroundColor="red";
    alert("Los Campos no deben estar vacios");
    error = error+1;
}else{
    if(!(expresion.test(nombre.value))){
        var temp = nombre.value.toUpperCase();
        nombre.value = temp;
    }else{
        nombre.focus();
        nombre.style.backgroundColor="red";
        alert("La entrada no es valida");
        error = error+1;
    }
}

if( descripcion.value == "" ){
    descripcion.focus();
    descripcion.style.backgroundColor="red";
    alert("Los Campos no deben estar vacios");
    error = error+1;
}
if(error == 0){
    var url = "addCarrera";
    var params = "name="+ nombre.value +"&descripcion="+descripcion.value;
    ajaxPost(url,params,"addres");
    document.getElementById("addres").setAttribute("class","visible");
    clearing();
}
}

function clearing(){
  var nombre = document.getElementById("Addname");
  var descripcion = document.getElementById("Adddescripcion");
  nombre.value="";
  descripcion.value="";
  nombre.style.backgroundColor="white";
  descripcion.style.backgroundColor="white";
  var timer = setTimeout("ocultar()", 1500);
}

我处理 Ajax 请求的代码

var ajaxCall;

function ajax_request() {
    if(window.XMLHttpRequest){
        //codigo para IE7+,Firefox,Chrome, Opera,Safari
        ajaxCall=new XMLHttpRequest();
    }else{
        //codigo para IE6 y 5
        ajaxCall=new ActiveXObject("Microsoft.XMLHTTP");
    }
}

function ajaxPost(url ,params, respuesta){
    ajax_request();
    ajaxCall.onreadystatechange = statechangeHandle(respuesta); 
    ajaxCall.open("POST",url,true);
    ajaxCall.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajaxCall.setRequestHeader("Content-length", params.length);
    ajaxCall.setRequestHeader("Connection", "close");
    ajaxCall.send(params);
    //alert("respuesta? "+respuesta); 
}

function statechangeHandle(text){
    //alert("text?"+text);
    //alert("ready?"+ajaxCall.readyState);
    if(ajaxCall.readyState == 4 && ajaxCall.status === 200){
        //alert("prueba");
        document.getElementById(text).innerHTML=ajaxCall.responseText;
        //alert(ajaxCall.responseText);
    }
}

html部分

<h3>Agregar Carrera</h3>
                <table>
                    <tr>
                        <td>Nombre:</td>
                        <td><input type="text" id="Addname" size="20" /></td>
                    </tr>
                    <tr>
                        <td>Descripcion:</td>
                        <td><textarea rows="2" cols="20" id="Adddescripcion" >     </textarea></td>
                    </tr>
                    <tr>
                        <td><input type="button" value="Agregar" onclick="validate()"></td>
                    </tr>                    
                </table>
                <div class="ocultar" id="addres"></div>

提前致谢。

顺便说一句,ajaxPost 的 ajax 没有显示任何东西,但例如在 statechangeHandle 如果在分配 responseText 之前激活 te 警报,则 html 已正确修改但如果不是,则 div 保持不变,我不太确定这意味着什么,它喜欢它必须等待我不知道我是否只是做错了什么

4

0 回答 0