2013-09-03 3 views
1

Это мой код JavaScriptJavascript код это не возвращает истинное

function validatenewcat(){ 
     var category = document.getElementById("cat").value; 
     if(category==""){ 
      setTimeout(document.getElementById("validate").innerHTML="!PLz Enter The Category Name", 2000); 
      return false; 
     } 
    else{ 
     var url="catnamecheck.do?id="+category; 
     xmlhttp.open("post", url,true); 
     xmlhttp.onreadystatechange=(function (callback){ 
      return function(){ 
      if(xmlhttp.readyState==4){  
       if(xmlhttp.status==200){ 
        var temp = xmlhttp.responseText; 
        obj = JSON.parse(temp); 
        if(obj.catgoryname==category){ 
         alert("inside flase"); 
        var validate = document.getElementById("validate"); 
        validate.innerHTML="!PLz Enter The Unique Category Name"; 
         callback(false); 
        } 
       if(obj.catgoryname!=category){ 
        alert("inside true"); 
         callback(true); 
        } 
        } 
       } 
      } 
     })(myCallback); 
     xmlhttp.send(null); 
     } 
    } 

Может кто-нибудь пожалуйста, помогите мне эта функция не возвращает истину здесь я использую Ajax, чтобы проверить уникальное имя категории из javacode Это мой функция обратного вызова

function myCallback(returnedValue) { 
     if (returnedValue) { 
      alert("entered callback function"); 
      // true returned. Validation successful. Do whatever you want 
      // here in this case. 
     } 
     else { 
      // false returned. Validation failed. Handle the "false" scenario here 
      alert("entered callback function"); 
     } 
    } 

это мой код JSP

<form name="frm" action="createnewcatgoryBean.jsp" method="post" onsubmit="return validatenewcat()"> 
<table style="padding: 5px 0px 0px 8px;"> 
<tr> 
<th colspan="2"> 
<div style="width: width:271px; color:red;" id="validate"></div> 
</th> 
</tr> 
<tr> 
<th>Category Name<span>:</span></th><td><input id="cat" onblur="return validatenewcat()" type="text" name="category"> 
</td> 
</tr> 
<tr> 
<th>Quotations form<span>:</span></th><td><input type="checkbox" name="quotations"></td> 
</tr> 
<tr> 
<th>Agreement form<span>:</span></th><td><input type="checkbox" name="agreement"></td> 
</tr> 
<tr> 
<th>Payment form<span>:</span></th><td><input type="checkbox" name="payment"></td> 
</tr> 
<tr> 
<th>ETI<span>:</span></th><td><input type="checkbox" name="eti"></td> 
</tr> 
<tr> 
<td colspan="2" style="float:right; padding-top:15px"> 
<input type="submit" value="Submit" style="width: 60px;"> 
</td> 
</tr> 
</table> 
</form> 

Может кто-нибудь пожалуйста, скажите мне, как вернуть успех или форма недостаточности функции обратного вызова это мой отредактированный код


Это мой Javascript код

function validatenewcat(){ 
     var category = document.getElementById("cat").value; 
     if(category==""){ 
      setTimeout(document.getElementById("validate").innerHTML="!PLz Enter The Category Name", 2000); 
      return false; 
       } 
    else{ 
     var url="catnamecheck.do?id="+category; 
     xmlhttp.open("post", url,true); 
     xmlhttp.send(null); 
     xmlhttp.onreadystatechange= function(){ 
      if(xmlhttp.readyState==4){  
       if(xmlhttp.status==200){ 
        var temp = xmlhttp.responseText; 
        obj = JSON.parse(temp); 
        var unique = (obj.catgoryname != category); 
        if(unique){ 
         document.getElementById("newcatform").submit(); 
          } 
        else{ 
        var validate = document.getElementById("validate"); 
        validate.innerHTML="!PLz Enter The Unique Category Name"; 
         } 
        } 
       } 
      }; 
      return false;  
     } 

это мой JSP код

<form id="newcatform" name="frm" action="createnewcatgoryBean.jsp" method="post"> 
<table style="padding: 5px 0px 0px 8px;"> 
<tr> 
<th colspan="2"> 
<div style="width: width:271px; color:red;" id="validate"></div> 
</th> 
</tr> 
<tr> 
<th>Category Name<span>:</span></th><td><input id="cat" onblur="return validatenewcat()" type="text" name="category"> 
</td> 
</tr> 
<tr> 
<th>Quotations form<span>:</span></th><td><input type="checkbox" name="quotations"></td> 
</tr> 
<tr> 
<th>Agreement form<span>:</span></th><td><input type="checkbox" name="agreement"></td> 
</tr> 
<tr> 
<th>Payment form<span>:</span></th><td><input type="checkbox" name="payment"></td> 
</tr> 
<tr> 
<th>ETI<span>:</span></th><td><input type="checkbox" name="eti"></td> 
</tr> 
<tr> 
<td colspan="2" style="float:right; padding-top:15px"> 
<input type="button" value="Submit" onclick="validatenewcat()" style="width: 60px;"> 
</td> 
</tr> 
</table> 
</form> 
</div> 

     } 
+0

, когда вы хотите, чтобы вернуть ' true'? –

+0

после успешной проверки –

ответ

3

Код в пределах onreadystatechange называется «event handler» и будет выполняться только после завершения операции POST. Это то, что ваша validatenewcat функция фактически делает при запуске:

var category = document.getElementById("cat").value; 
var url = "catnamecheck.do?id=" + category; 
xmlhttp.open("post", url, true); 
xmlhttp.send(null); 
xmlhttp.onreadystatechange = (code to be called later) 
return false; // <-- Always return false 

Вам нужно переместить код, который требует ИСТИНЫ/FALSE результата внутри функции onreadystatechange, так что он выполняется после того, как операция HTTP завершена:

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4) { 
     if (xmlhttp.status == 200) { 
      var temp = xmlhttp.responseText; 
      obj = JSON.parse(temp); 
      var unique = (obj.catgoryname != category); 

      if (unique) { 
       // Submit the form to the server 
       document.getElementById("newcatform").submit(); 
      } else { 
       document.getElementById("validate").innerHTML = "!PLz Enter The Unique Category Name"; 
      } 
     } 
    } 
} 

в вашей JSP, вы можете использовать эту функцию для проверки вашей категории перед отправкой формы:

<form id="newcatform" name="frm" action="createnewcatgoryBean.jsp" method="post"> 
... 
<input type="button" value="Submit" onclick="validatenewcat()"> 
</form> 

Очевидно, что некоторое переименование было бы разумным. Например, "validatenewcat()" может стать "validateandsend()".

Наконец, чтобы избежать проблем синхронизации, вы должны настроить функцию обратного вызова перед тем вы посылаете запрос, так как он уже существует, когда ответ возвращается:

xmlhttp.open("post", url, true); 
xmlhttp.onreadystatechange = function() { 
    // ... callback code here ... 
} 
xmlhttp.send(null); // <- Move under onreadystatechange callback 
+0

// Сделайте что-то с результатом, что я могу здесь сделать –

+0

Здесь вы помещаете код успеха/отказа. Ваш исходный вопрос подразумевал, что вам нужно 'validatenewcat()' для возврата true: здесь должен выглядеть код, который ожидает true. – seanhodges

+0

Главное, чтобы понять, что ваш запрос «catnamecheck.do» не будет отвечать сразу. Остальная часть вашей функции validatenewcat() завершит (и вернет false), затем * позже * ответ catnamecheck.do вернется и будет вызываться код внутри 'onreadystatechange'. – seanhodges

Смежные вопросы