2017-07-29 10 views
0

Ich habe diesen Ajax-Code geschrieben, um Daten an den Web-Service asmx zu senden. Es funktioniert, aber mit einem einzigen Klick, fügt es Daten mehrmals und manchmal dauert 2,3 klicken, um Daten einzufügen.Warum wird meine Schaltfläche mehrfach ausgeführt?

Js

<script type="text/javascript"> 

      function save() 
      { 
       $("button").click 
       (
        function() 
        { 
         $.post 
         (
          "http://localhost:82/ws/himher.asmx/InsertUsers", 
          {name: txtUserName.value, pwd: txtUserPwd.value}, 
//       
         ); 

        } 
       ); 
      } 



     </script> 
    </head> 
<body> 
    <div class="container-fluid"> 
     <div class="row"> 
      <div class="col-md-12"> 
       <label>User Name</label> 
       <input id="txtUserName" type="text" class="form-control" /> 
      </div> 
     </div> 
     <div class="row"> 
      <div class="col-md-12"> 
       <label>Password</label> 
       <input id="txtUserPwd" type="text" class="form-control" /> 
      </div> 
     </div>  
     <br/> 
     <div class="row"> 
      <div class="col-md-12">  
       <button type="submit" onclick='save()' class="btn btn-primary pull-right">Register</button> 
      </div> 
     </div>  
    </div> 

CS-:

public class himher : System.Web.Services.WebService 
{ 

    [WebMethod(EnableSession = true)] 
    //[ScriptMethod(UseHttpGet = false)] 
    public string InsertUsers(string name, string pwd) 
    { 
     try 
     { 
      basicoperation bop = new basicoperation(); 
      return bop.insertUsers(name, pwd); 
     } 
     catch (Exception ex) 
     { 

      throw ex; 
     } 


    } 


    public string insertUsers(string Name, string Password) 
    { 
      string status; 

      String ConStr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString; 

      SqlConnection sqlCon = new SqlConnection(ConStr); // to make a connection with DB 

      SqlCommand sqlCom = new SqlCommand("InsertUsers", sqlCon); // now in order to perform action such as insert SP, we must create command object which needs command name and conncetion only 

      sqlCom.CommandType = CommandType.StoredProcedure; // you must tell the system that insertInfo is a storedprocedure 

      SqlParameter sqlParamName = new SqlParameter("@UserName", Name); 
      SqlParameter sqlParamPwd= new SqlParameter("@Password", Password); 

      sqlCom.Parameters.Add(sqlParamName); 
      sqlCom.Parameters.Add(sqlParamPwd);  

      try 
      { 
       sqlCon.Open(); 

       int i= sqlCom.ExecuteNonQuery(); // executenonquery is used for INSERT, UPDATE, DELETE 

       //sqlCom.ExecuteScalar(); // used to pick or read a single value from procedure 
       // Response.Write("Done"); 

       sqlCon.Close(); 

       status= "Success"; 
      } 
      catch (Exception ex) 
      { 
       //response.Write(ex.Message); 
       status = ex.Message; 
      } 
     return status; 
    } 
} 
+0

Du solltest kein Komma nach '{name: txtUserName.value, pwd: txtUserPwd.value} '. –

Antwort

2

Sie haben zwei Bindungen zu einer Sparfunktion, einer von ihnen binded wird, wenn Sie auf Ihre Schaltfläche klicken. Rewrite Ihre JS wie folgt aus:

<script type="text/javascript"> 
    function save() 
    { 
     $.post(
      "http://localhost:82/ws/himher.asmx/InsertUsers", 
      {name: txtUserName.value, pwd: txtUserPwd.value} 
     ); 
    } 
</script> 

Auf diese Weise Ihre save Funktion nur Spar Logik tun. Bindung, um diese Funktion aufzurufen, erfolgt in HTML von <button type="submit" onclick='save()'>.

0

Wenn Sie diesen Code an Benutzer freigeben möchten, müssen Sie wirklich eine doppelte Aktion verhindern, anstatt zu hoffen, dass sie nur einmal darauf klicken. Obwohl Sie herausfinden können, warum es Multiples einfügt, können Sie sich nicht darauf verlassen, dass das Benutzerverhalten den Müll aus der Datenbank fernhält. Sie werden langsam gehen und den Knopf frustriert hämmern. Selbst wenn Sie die Schaltfläche deaktivieren, werden sie aktualisiert und erneut gesendet. Deduplizieren Sie Ihre Daten vor dem Einfügen - das ist mehrschichtige Informationssicherheit; selbst wenn sie das Skript deaktivieren, das sie hämmert die Schaltfläche stoppt, akzeptieren Sie nicht die Duplikate

Hinweis, ich biete dies nicht als eine Lösung für eine echte "Ich klicke dies einmal und 3 Daten eingefügt werden" - behebe den Fehler sicher, aber kontrolliere das Benutzerverhalten bezüglich deines Wunsches nach Datenreinheit, innerhalb des Servers (wo du die totale Kontrolle hast)

Verwandte Themen