在 OnClientClick AJAX 完成后触发 OnClick
Fire OnClick after OnClientClick AJAX has finished
我正在使用 ASP.Net,需要在 JavaScript 函数完全完成后调用服务器端函数。
问题是它在客户端代码完成之前执行服务器代码,而我的隐藏值是空的。 AJAX 调用是跨域的,因此使用 async: false 似乎不起作用。
我在下面添加了基本代码以更好地解释。
HTML
<input id="hdnToken" type="hidden" name="hdntoken" value="" />
<asp:Button ID="btnSubmit" Text="Submit" OnClientClick="return getToken();" OnClick="btnSubmit_Click" runat="Server"></asp:Button>
JavaScript
function getToken() {
$.ajax({
async: false, // Ignored across domains
method: "POST",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
success: OnSuccess,
error: OnError
});
function OnSuccess(response) {
$('#hdnToken').val(response);
return true;
}
function OnError(response) {
console.log(response);
return false;
}
};
ASP.Net 服务器端代码
protected void btnSubmit_Click(object sender, EventArgs e)
{
var hidden = Request.Form["hdnToken"];
}
一个简单的技巧是在页面上放置一个没有文本但带有 OnClick 事件的 LinkButton。
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"></asp:LinkButton>
然后您可以使用 UniqueID
从 link 模拟 PostBack
<script type="text/javascript">
function simulateClick() {
__doPostBack('<%= LinkButton1.UniqueID %>', '');
}
</script>
现在当 simulateClick()
为 运行 时,将触发代码隐藏中的 LinkButton1_Click
方法。
通过放置虚拟 LinkButton,您无需禁用 enableEventValidation
我正在使用 ASP.Net,需要在 JavaScript 函数完全完成后调用服务器端函数。
问题是它在客户端代码完成之前执行服务器代码,而我的隐藏值是空的。 AJAX 调用是跨域的,因此使用 async: false 似乎不起作用。
我在下面添加了基本代码以更好地解释。
HTML
<input id="hdnToken" type="hidden" name="hdntoken" value="" />
<asp:Button ID="btnSubmit" Text="Submit" OnClientClick="return getToken();" OnClick="btnSubmit_Click" runat="Server"></asp:Button>
JavaScript
function getToken() {
$.ajax({
async: false, // Ignored across domains
method: "POST",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
success: OnSuccess,
error: OnError
});
function OnSuccess(response) {
$('#hdnToken').val(response);
return true;
}
function OnError(response) {
console.log(response);
return false;
}
};
ASP.Net 服务器端代码
protected void btnSubmit_Click(object sender, EventArgs e)
{
var hidden = Request.Form["hdnToken"];
}
一个简单的技巧是在页面上放置一个没有文本但带有 OnClick 事件的 LinkButton。
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"></asp:LinkButton>
然后您可以使用 UniqueID
<script type="text/javascript">
function simulateClick() {
__doPostBack('<%= LinkButton1.UniqueID %>', '');
}
</script>
现在当 simulateClick()
为 运行 时,将触发代码隐藏中的 LinkButton1_Click
方法。
通过放置虚拟 LinkButton,您无需禁用 enableEventValidation