2012-02-14 37 views
2

我有这个问题:我需要验证的文件尚未上传,为此我使用web服务与由isAlreadyUploaded()调用的Jquery返回true或false。如果文件存在,则要求进行确认。那么,一旦完成,我想调用Button1_Click函数来完成操作。我的问题是他们两人都被同时打电话,从而避免了确认。asp.net按钮客户端提交前确认

也许我以错误的方式接近问题。如果是这样,请随时纠正我。

<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

请张贴的JavaScript方法'isAlreadyUploaded' – xandercoded 2012-02-14 18:26:41

回答

3

,如果你加入下列选项它应该工作:

$.ajax({ 
    /* ... code ...*/ 
    async : false, 
    /* ... code ...*/ 
}); 

你让一个asynchronous请求到服务器,当你需要做一个synchronous请求。

http://api.jquery.com/jQuery.ajax/

+0

只需将'async'属性设置为'false'就足以使其工作?再看一看。 – ShankarSangoli 2012-02-14 18:36:32

+2

它做到了。非常感谢你。 – 2012-02-14 18:38:00

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; 
}