我遇到了这个问题:我需要验证文件是否尚未上传,我使用带有Jquery的webservice,由isAlreadyUploaded()调用,返回true或false。如果文件存在,则询问是否继续进行确认。那么,一旦完成,我想调用Button1_Click函数来完成操作。我的问题是他们两个人同时被召唤,从而避免了确认。
也许我正以错误的方式接近问题。如果是这样,请随时纠正我。
<asp:Button ID="Button1" runat="server" Text="Upload" onclick="Button1_Click" OnClientClick="return isAlreadyUploaded()" />
<script>
function isAlreadyUploaded() {
var mystring = "";
$.ajax({
type: "POST",
url: "Main.aspx/alreadyUploaded",
data: "{'swfFile':'" + $("#<%=FileUpload2.ClientID%>").val() + "','flvFile':'" + $("#<%=FileUpload3.ClientID%>").val() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
mystring = msg.d;
alert(mystring);
if (mystring != "") {
if (confirm(mystring)) {
return true;
} else {
return false;
}
} else {
return true;
}
}
});
}
</script>
答案 0 :(得分:3)
如果添加以下选项,它应该有效:
$.ajax({
/* ... code ...*/
async : false,
/* ... code ...*/
});
当您需要发出asynchronous
请求时,您正在向服务器发出synchronous
个请求。
答案 1 :(得分:1)
因为ajax本质上是异步isAlreadyUploaded
不会等待服务器响应,因为您没有从isAlreadyUploaded
返回任何内容,它将被视为true
并且该按钮将提交形式。
您可以将ajax config的async
属性设置为false
,以便它在离开函数之前等待服务器响应。
function isAlreadyUploaded() {
var mystring = "", retVal = false;
$.ajax({
async: false
type: "POST",
url: "Main.aspx/alreadyUploaded",
data: "{'swfFile':'" + $("#<%=FileUpload2.ClientID%>").val() + "','flvFile':'" + $("#<%=FileUpload3.ClientID%>").val() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
mystring = msg.d;
alert(mystring);
if (mystring != "") {
if (confirm(mystring)) {
retVal = true;
} else {
retVal= false;
}
} else {
retVal = true;
}
}
});
return retVal;
}
答案 2 :(得分:0)
ajax工具包中有一个ConfirmButtonExtender,可能就是你要找的东西。 以下是我发现的一个示例:http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/ConfirmButton/ConfirmButton.aspx