2016-09-21 18 views
0

Ich habe eine Funktion, die nicht funktioniert wird erwartet.Javascript Funktion funktioniert nicht wie erwartet

Das Problem ist, dass ich

if (Trim(ObjPriXMLHTTP.responseText) != 0) gesetzt haben, dann sollte es innen und laufen, eine andere Funktion gehen, die derzeit nicht geht, wenn meine if (Trim(ObjPriXMLHTTP.responseText) != 0) == 1.

Der Debugger wirft mich nur aus der übergeordneten Funktion. möchte ich, dass laufen, wenn der Wert ein anderer als 0

Im Folgenden meine js Funktion

ist
function getCounterForCheck() { 
     StrPriFnName = "getCounterForCheckInward(" + document.getElementById('TxtInwardNo').value + ")"; 
     var ObjPriXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP") 
     ObjPriXMLHTTP.open("GET", "FrmInwardXMLHTTP.aspx?para=" + StrPriFnName, false); 
     ObjPriXMLHTTP.send(""); 

     if (Trim(ObjPriXMLHTTP.responseText) != 0) { 

      function getOtherDBInward() { 
       StrPriFnName = "FunGetOTHERDBInward(" + document.getElementById('TxtInwardNo').value + ")"; 
       var ObjPriXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP") 
       ObjPriXMLHTTP.open("GET", "FrmInwardXMLHTTP.aspx?para=" + StrPriFnName, false); 
       ObjPriXMLHTTP.send(""); 

       if (Trim(ObjPriXMLHTTP.responseText) != "") { 
        var StrPriData = ObjPriXMLHTTP.responseText.split('~'); 
        document.getElementById('HidRefMkey').value = StrPriData[0]; 
        document.getElementById('TxtDeliveredBy').value = StrPriData[1]; 
        document.getElementById('cmbRecdDept').value = StrPriData[2]; 
        FunEmpFillDept(); 
        document.getElementById('cmbRecdEmp').value = StrPriData[3]; 
        document.getElementById('HidCurrentEmp').value = StrPriData[3]; 
        document.getElementById('Txt_RefBillNo').value = StrPriData[6]; 
        igdrp_getComboById("DtmInfRef_DocDate").setValue(Trim(StrPriData[7])); 
        igedit_getById("TxtWN_Billamt").setValue(StrPriData[8]); 
        document.getElementById('TxtRemarks').value = StrPriData[9]; 
        document.getElementById('TxtPartyName').value = StrPriData[10]; 
       } 

       else { 
        alert("ERROR: Document does not exist"); 
        //alert("ERROR: Document does not exist and status also"); 
        document.getElementById('TxtInwardNo').focus(); 
        return false; 
       } 
      } 

     } 
     else { 
      //alert('invoice not found'); 
     } 
    } 
+0

Werfen Sie uns einen Knochen: Sagen Sie uns, was 'Trim' tut, und was der Rückgabewert ist, wenn Sie' Trim (ObjPriXMLHTTP.responseText) ''. (Für letzteres denke ich, dass es "1" ist, was seltsam erscheint, wenn wir annehmen, dass "Trim" wie "String # trim" ist und eine Zeichenkette zurückgibt ...) –

+0

@TJCrowder: Entschuldigung, wenn meine Code ist falsch. Es gibt mir '1' oder' 0' zurück. Ja, es gibt einen String-Wert zurück. – BNN

+0

@ T.J.Crowder: lassen Sie mich wissen, was der richtige Weg ist, dies zu tun. und führen Sie die zweite Funktion, wenn es einen anderen Wert als 0 hat 0 – BNN

Antwort

2

Es gibt ein paar Probleme mit diesem Code sind.

  1. Bis ES2015, es war ungültig erklären eine Funktion in einem Flusssteuerblock (wie der Körper eines if), und es bleibt eine wirklich schlechte Idee ™. Aber das macht dein Code.

  2. Sie haben deklariert die Funktion, aber Sie haben es nicht aufgerufen. Es ist also genau das, was der Debugger machen sollte; Es gab nichts mehr zu tun in getCounterForCheck.

  3. In Kommentare haben Sie gesagt, Trim(ObjPriXMLHTTP.responseText) wird "1" oder "0" (z. B. Strings) zurückgeben. Aber Sie vergleichen das mit 0 (die Nummer). Da Sie einen losen Vergleich verwenden (!=), wird JavaScript den Wert für Sie erzwingen, und in diesem speziellen Fall wird dies in der Art geschehen, wie Sie es wahrscheinlich erwarten. Ich rufe es nur auf, weil es für Trim Sinn machen könnte, den Wert explizit zu konvertieren und 1 oder 0 zurückzugeben (z. B. als Zahlen).

Deklarieren Sie die Funktion außerhalb den if Block, und es nennen, wenn Sie es nennen wollen. Etwas wie:

function getCounterForCheck() { 
    StrPriFnName = "getCounterForCheckInward(" + document.getElementById('TxtInwardNo').value + ")"; 
    var ObjPriXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP") 
    ObjPriXMLHTTP.open("GET", "FrmInwardXMLHTTP.aspx?para=" + StrPriFnName, false); 
    ObjPriXMLHTTP.send(""); 

    if (Trim(ObjPriXMLHTTP.responseText) != 0) { 
     getOtherDBInward(); 
    } 
    else { 
     //alert('invoice not found'); 
    } 

    function getOtherDBInward() { 
     StrPriFnName = "FunGetOTHERDBInward(" + document.getElementById('TxtInwardNo').value + ")"; 
     var ObjPriXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP") 
     ObjPriXMLHTTP.open("GET", "FrmInwardXMLHTTP.aspx?para=" + StrPriFnName, false); 
     ObjPriXMLHTTP.send(""); 

     if (Trim(ObjPriXMLHTTP.responseText) != "") { 
      var StrPriData = ObjPriXMLHTTP.responseText.split('~'); 
      document.getElementById('HidRefMkey').value = StrPriData[0]; 
      document.getElementById('TxtDeliveredBy').value = StrPriData[1]; 
      document.getElementById('cmbRecdDept').value = StrPriData[2]; 
      FunEmpFillDept(); 
      document.getElementById('cmbRecdEmp').value = StrPriData[3]; 
      document.getElementById('HidCurrentEmp').value = StrPriData[3]; 
      document.getElementById('Txt_RefBillNo').value = StrPriData[6]; 
      igdrp_getComboById("DtmInfRef_DocDate").setValue(Trim(StrPriData[7])); 
      igedit_getById("TxtWN_Billamt").setValue(StrPriData[8]); 
      document.getElementById('TxtRemarks').value = StrPriData[9]; 
      document.getElementById('TxtPartyName').value = StrPriData[10]; 
     } 

     else { 
      alert("ERROR: Document does not exist"); 
      //alert("ERROR: Document does not exist and status also"); 
      document.getElementById('TxtInwardNo').focus(); 
      return false; 
     } 
    } 
} 

Ich habe nicht genau auf die Funktion gesucht, aber wenn es nicht innerhalb getCounterForCheck verschachtelt werden muss, könnte man es ausziehen.

+0

lassen Sie mich versuchen und überprüfen – BNN

+0

Sir, es funktioniert. aber können wir diese 'string' in' int' für mehr Genauigkeit konvertieren – BNN

+0

@nad: Ja. Es gibt Dutzende von Fragen, mit Antworten, darüber hier auf SO. –

Verwandte Themen