2016-07-30 15 views
0

Quick Hintergrund: Sehr neu für Web-Entwicklung. Ich habe eine Bootstrap-Seite mit einem Formular, das Benutzer ausfüllen können. Es gibt vier Felder (zwei Textfelder, ein Radio, ein Dropdown). Die Idee war, ein JSON mit diesen Eingabedaten zu bilden und es an meinen HTTP-Server zu senden, aber es scheint nicht mehr zu funktionieren.jQuery HTTP-Post funktioniert nicht mehr, funktioniert nur, wenn lange Zeichenfolgen eingegeben werden

Sehr seltsam, mein Code funktionierte perfekt vor ein paar Stunden (habe mit requestb.in getestet). Jetzt sendet es plötzlich (1) nur den POST, wenn ich lange Werte für die Variablen apiname und apiurl habe, und (2) sehe nicht mehr, was ich aus den Radio-Checkboxen ausgewählt habe (env1 - env3) und stattdessen denkt immer, ich habe "Dev" gewählt, unabhängig davon, was tatsächlich ausgewählt wurde. ich meine Probleme unter der Annahme durch die jQuery in meinem Code und nicht die HTML verursacht, also habe ich das hier angebracht:

für die Hilfe
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">  </script> 

    <script> 
    $(document).ready(function(){ 
     $("button").click(function(){ 
      var env1 = document.getElementById("seldevid"); 
      var env2 = document.getElementById("selstageid"); 
      var env3 = document.getElementById("selprodid"); 
      var apiname = $("#apinameid").val(); 
      var apiurl = $("#apiurlid").val(); 
      var actionvar; 
      $("#actionid").change(function() { 
      actionvar = $(this).val(); 
      }).change(); 
      if (env1.checked = true) { 
       var env = "Dev"; 
      } else if (env2.checked = true) { 
       var env = "Stage"; 
      } else if (env3.checked = true) { 
       var env = "Prod"; 
      } 
      $.post("http://requestb.in/107fmof1", 
      { 
       apiName: apiname, 
       apiURL: apiurl, 
       environment: env, 
       action: actionvar 
      }, 
      function(data,status){ 
       alert("Data: " + data + "\nStatus: " + status); 
      }); 

     }); 




    }); 
    </script> 

Dank!

Antwort

0

Erste Frage: Warum immer "Dev"?

Das Problem besteht darin, dass Sie in Ihren if-Anweisungen eine Zuweisung anstelle eines booleschen Vergleichs verwendet haben. Sie müssen == verwenden, um die beiden Werte für die Gleichheit zu vergleichen. Stattdessen stellen Sie env1.checked = true ein, was zu True führt, so dass env immer auf "Dev" festgelegt wird.

if (env1.checked == true) { 
    var env = "Dev"; 
} else if (env2.checked == true) { 
    var env = "Stage"; 
} else if (env3.checked == true) { 
    var env = "Prod"; 
} 

oder sogar

var env; 
if (env1.checked) { 
    env = "Dev"; 
} else if (env2.checked) { 
    env = "Stage"; 
} else if (env3.checked) { 
    env = "Prod"; 
} 

Zweite Frage: Warum nicht Entsendung?

sollten Sie versuchen, Ihren Code ein wenig zu vereinfachen:

$(document).ready(function(){ 
    var env1 = document.getElementById("seldevid"); 
    var env2 = document.getElementById("selstageid"); 
    var env3 = document.getElementById("selprodid"); 

    $("button").click(function(){ 
     var env = "Dev"; 
     if (env2.checked) { 
      env = "Stage"; 
     } else if (env3.checked) { 
      env = "Prod"; 
     } 

     $.post("http://requestb.in/107fmof1", 
      { 
       apiName:  $("#apinameid").val(), 
       apiURL:  $("#apiurlid").val(), 
       environment: env, 
       action:  $("#actionid").val() 
      }, 
      function(data,status){ 
       alert("Data: " + data + "\nStatus: " + status); 
      } 
     ); 
    }); 
}); 

dann über den Browser Developer Tools, um zu sehen, was genau POST'd wird, wenn überhaupt.

+0

Hmm, das scheint das Radioknopf Problem gelöst zu haben, aber es immer noch nicht konsequent. Ich kann nicht einmal scheinen, irgendwelche Muster mit, wenn es tut und nicht POST, scheint völlig zufällig. Ich habe die Entwicklertools verwendet, und das zeigt, dass es fast immer einen POST gibt, aber die 'Parameter' sind fast immer leer (der HTTP-Server erhält also nichts). – user6656429

+0

Eine Möglichkeit besteht darin, dass Sie das Formular senden, bevor der $ (Dokument) .ready (...) Code ausgeführt wird. Wenn Sie in diesem Fall keine Namen für die Formularfelder angeben, wird ein leerer POST angezeigt. – Andy

+0

In dem Fall der leeren POST, sehen Sie die apiName, etc Felder, aber sie sind leer? oder sehen Sie keine POST-Daten? oder was? Hat Ihr

-Tag auch eine Aktion und eine Methode definiert? Wenn ja, was sind sie? – Andy