![](/img/trans.png)
[英]why does the click event handlers execute so many times after I click the submit button?
[英]Why does my button click execute multiple times?
我已经编写了此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;
}
}
您有两个保存功能的绑定,当您单击按钮时,其中一个已绑定。 像这样重写您的JS:
<script type="text/javascript">
function save()
{
$.post(
"http://localhost:82/ws/himher.asmx/InsertUsers",
{name: txtUserName.value, pwd: txtUserPwd.value}
);
}
</script>
这样,您的save
功能将仅保存逻辑。 通过<button type="submit" onclick='save()'>
在HTML中进行绑定以调用此函数。
如果要向用户发布此代码,则确实需要实施一些重复的操作预防措施,而不是希望他们单击一次即可。 因此,虽然您可能会发现为什么它会插入倍数,但是您不能依靠用户的行为将垃圾内容排除在数据库之外。 他们会慢下来并挫败该按钮。 即使您禁用该按钮,它们也会刷新并再次提交。 在插入之前对数据进行重复数据删除-这是多层信息安全性; 即使他们禁用了停止敲击按钮的脚本,您也不接受重复的
请注意,我不提供此解决方案作为正版“我单击一次并插入3个数据”的解决方案-可以解决该错误,但可以在服务器内部(根据您对数据纯度的要求)控制用户行为您完全可以控制)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.