2017-07-29 36 views
0

我已经写了这个ajax代码发送数据到web服务asmx。它可以工作,但只需点击一次,它会多次插入数据,有时需要2,3次点击才能插入数据。为什么我的按钮单击多次执行?

的.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

“{name:txtUserName.value”后面不应有逗号, pwd:txtUserPwd.value}'。 –

回答

2

你有两个绑定的储蓄功能,其中一人被绑定,当您点击此按钮。重写你的JS是这样的:

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

这样你save功能会做节能逻辑。 调用此函数的绑定在HTML中由<button type="submit" onclick='save()'>完成。

0

如果你要将这段代码发布给用户,你真的需要实现一些重复的动作预防,而不是希望他们只需点击一次。 Ergo虽然可能会发现它为什么会插入倍数,但您不能依赖用户行为将垃圾回收到数据库之外;他们会慢慢下手,并沮丧地敲击那个按钮。即使您禁用该按钮,它们也会刷新并再次提交。在插入之前重复删除数据 - 这是多层信息安全;即使他们禁用阻止他们敲击按钮的脚本,您也不会接受重复的内容

请注意,我不提供此解决方案作为真正的“我点击一次,插入3个数据”的解决方案 - 修正该错误,但在服务器内(您完全控制的位置)控制用户对数据纯度的要求。

相关问题