2014-05-01 5 views
0

J'ai une page nominale.jsp, qui comprend header.jsp.Ici j'utilise Ajax pour la première fois, pour la requête dans header.jsp, puis pour le La deuxième fois que la requête Ajax est appelée sur nominal.jsp, je fais face au problème de conflit dans la requête Ajax. En raison de ce problème, ma liste déroulante préférée n'est pas affichée. Parfois, lorsque la réponse est entrée dans le JavaScript, les listes déroulantes sont affichées et si les réponses ne sont pas saisies dans le JavaScript, les listes déroulantes ne sont pas affichées. J'ai essayé mon niveau le mieux pour résoudre le problème, mais je n'ai pas pu le résoudre. S'il vous plaît aidez-moi les garsComment résoudre le conflit deux requête ajax en même temps

thank u,

Mon code header.jsp:

<script> 
headerDisplay(); 
function headerDisplay() 
{ var url ='<%=request.getContextPath()%>/summary?operation=header'; 
    transactionRequest(url);  
} 
function transactionRequest(url) 
{ 
     if (window.XMLHttpRequest) 
     {    
      req = new XMLHttpRequest();     
      req.onreadystatechange = transactionResponse;     
        try 
        { 
           req.open("POST", url, true); //was get     
          } 
        catch(e) 
        { 
         alert("Problem Communicating with Server\n"+e); 
        }     
       req.send(null); 
     }  

     else if (window.ActiveXObject) 
     { 
      // IE 
      req = new ActiveXObject("Microsoft.XMLHTTP"); 
      if (req) 
       { 

        req.onreadystatechange = transactionResponse; 
        req.open("POST", url, true); 
        req.send(); 
       } 
     } 
} 
function transactionResponse() 
{   
     if (req.readyState == 4) // Complete 
     { 
       if (req.status == 200) // OK response 

      {  var servletVal = req.responseText;  
       var myObject = eval('(' + servletVal + ')');      
        var userId = myObject.userId; 

}}}...... 

</script> 


And,this is my nono.jsp code: 


<%@include file="/pages/common/header.jsp"%> 

<script> 
function displayNominal() 
{ 
    document.getElementById("ajaxLoading").style.display="block"; 
    var url ='<%=request.getContextPath()%>'+'/nominalList'; 
    postRequest(url); 
} 

function postRequest(url) { 
     if (window.XMLHttpRequest) { 
     req = new XMLHttpRequest(); 
     req.onreadystatechange = nominalSelect; 
     try { 
      req.open("POST", url, true); //was get     
     } catch (e) { 
      alert("Problem Communicating with Server\n" + e); 
     } 
     req.send(null); 
    } else if (window.ActiveXObject) { 
     // IE 
     req = new ActiveXObject("Microsoft.XMLHTTP"); 
     if (req) { 
      req.onreadystatechange = nominalSelect; 
      req.open("POST", url, true); 
      req.send(); 
     } 
    } 

} 
function nominalSelect() { 

    if (req.readyState == 4) // Complete 
    { 

     if (req.status == 200) // OK response 
     { 
      var servletVal = req.responseText; 

      var myObject = eval('(' + servletVal + ')'); 
      var userId = myObject.userId; 
      if (userId == null || userId == "") { 
       window.location = '/accounts1/?status=session'; 
      } 
}}.. 

</script> 

<body class="bodystyle" onload="displayNominal()"> 
<% if("N".equals(roleDemoStatus)) 
       {%> 
<!-- /#demo Header --> 
    <div style="top: 0px; display: block;" id="header" class="fixed"> 
     <div class="outer"> 
      <h1 class="blog-title" style="text-align:center;margin-top:10px;"><span style="font-weight: normal; color:#777777; font-size: 30px;">accounts<font color="#5DA915">1</font>.co</span> Demo Only - <a href="https://accounts1.co/accounts1/pages/userRegistration/signup1.jsp"><font color="red">Click Here</font></a> To Use For Free Forever</h1> 
     </div><!-- .outer --> 
     <div style="display: block;" class="shadow"></div> 
    </div> 
<!-- /#Demo Header --> 
    <%} %> 
</body> 

Encore une fois merci pour l'avance.

+0

@Ramesh: Apparemment, il n'est pas? Sinon, la question serait étiquetée avec. – Bergi

+0

Ne faites pas de 'req' une variable globale! – Bergi

+1

Lorsque je faisais moi-même mon Ajax, je créais plusieurs variables différentes pour chaque type de requête. Maintenant, je répondrais: utilisez JQuery pour faire des appels Ajax plutôt que de le faire vous-même et vous n'aurez pas ce problème. – developerwjk

Répondre

0

Utilisez un rappel et un bloc try/catch pour faire respecter l'ordre de la demande:

function transactionResponse() 
    { 
    // Check whether this is the initial callback or a subsequent one 
    if (!!transactionResponse.state) 
    {   
     try 
     { 
     //POST data from the GET request 
     } 
     catch(e) 
     { 
     //Get data from the GET request 
     } 
     } 

    // Set state after the initial callback reference 
    else 
    { 
    transactionResponse.state = this; 
    }   
    } 

Références

Questions connexes