我试图在使用webmethod (.asmx
)时设置一个变量。
该按钮使用onclick
调用服务器端方法,使用onclientclick
调用javascript,后者调用and方法。
在调用onclick服务器端方法之前,我需要完全执行javascript代码,但是在回发之前,ajax调用似乎还没有完全执行。
警报是在回发之前调用的,但是在回发之后会调用webmethod。在完成回发之前,我需要从webmethod中设置变量。我已经尝试从javascript返回一个false,但是回发根本没有完成。
我正在asp.net中使用Masterpages。另外,在另一个工作良好的项目中,我有一个类似的函数,唯一的区别是在这个项目中,我使用的是MasterPage。
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnAddRegistration" ClientIDMode="Static" CssClass="btn-sm btn-default" runat="server"
CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
onclick="btnAddRegistration_Click"
OnClientClick='<%# "getSetContactID(\"" + Container.DataItemIndex + "\")" %>'
Text="Add 
Registration" />
</ItemTemplate>
</asp:TemplateField>
Javascript (调用webmethod)
function getSetContactID(rowIndex) {
var CellValue, cell, dataItemIndex;
var table = document.getElementById('<%=gvContactSearch.ClientID %>');
$.ajax({
type: "POST",
url: "WebService1.asmx/setContactIDgvContact",
data: '{DataItemIndex: "' + rowIndex + '"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: alert(rowIndex), <--this gets called before postback
failure: function (response) {alert(response.d);}
})
}
Webservice方法
[WebMethod]
public string setContactIDGV1(int DataItemIndex){
classDetails.gV1DataItemIndex = DataItemIndex;
return "";
}
发布于 2015-03-29 23:18:53
你这里有一个经典的种族条件场景。
默认情况下,AJAX调用是异步的,因此当您触发AJAX调用时,JS代码块逻辑上就会结束,然后触发下一个顺序事件,在本例中是服务器端事件。然后是AJAX代码执行的函数与服务器端onclick事件之间的竞争。在我看来你有几个选择:
event.preventDefault
),并在完成序列的AJAX success
方法中挂起一些东西async: false
选项https://stackoverflow.com/questions/29338759
复制