2012-04-26 96 views
0

我试图从jQuery调用serverside方法。它在Firefox中工作正常,但不在IE8和IE9中。无法为文件上传输入值调用jQuery Ajax方法

请找到下面的代码示例:

<div> 
    <asp:FileUpload ID="flAppIcon" runat="server" onchange="GetFileSize();"/> 
    <asp:HiddenField ID="_hdnAppIcon" runat="server" Value="0" /> 
</div> 

<script type="text/javascript" language="javascript"> 
    function GetFileSize() { 
     var PageURL = '<%= ResolveUrl("~/WebForm16.aspx") %>' 
     var test = ($('#<%=flAppIcon.ClientID%>').val()).toString(); 
     $("#<%=_hdnAppIcon.ClientID%>").val(test); 
     alert($("#<%=_hdnAppIcon.ClientID%>").val()); 
     $.ajax({ 
      type: "POST", 
      url: PageURL + '/GetFileSizeDetails', 
      data: '{file: "' + $("#<%=_hdnAppIcon.ClientID%>")[0].value + '"}', 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: OnSuccess, 
      failure: function (response) { 
       alert(response.d); 
      } 
     }); 
    } 

    function OnSuccess(response) { 
     alert(response.d); 
    } 
</script> 

[System.Web.Services.WebMethod] 
public static string GetFileSizeDetails(string file) 
{ 
    return "100"; 
} 

谁能帮助我知道这个问题的根本原因是什么?

感谢&问候, 桑托斯·库马尔Patro

+0

我不熟悉你usuing服务器端语言,但通常你需要你的服务器端函数实际打印的值,而不是尝试只是返回它。 – 2012-04-26 16:06:13

+0

不,他的语法是正确的 – tedski 2012-04-26 16:10:11

+0

看看'$(“#<%= _ hdnAppIcon.ClientID%>”)[0] .value'正在返回 它的格式为'C:\ fakepath \ your-file.jpg '这样就不会通过webmethod很好地发送 – tedski 2012-04-26 16:17:59

回答

0

由于$("#<%=_hdnAppIcon.ClientID%>")[0].value的格式为:C:\fakepath\your-file.jpg,它不会是有效的JSON当它通过

你选择将WebMethod去到服务器端文件路径而不是大小。根据您的函数名称,我假设您要将文件大小发送回服务器。

使用

$("#<%=_hdnAppIcon.ClientID%>")[0].files[0].size 

,而不是

$("#<%=_hdnAppIcon.ClientID%>")[0].value 
+0

我试图使用jquery获取上传文件的文件大小。但它在Firefox中运行良好,而不是在IE9中运行。它需要ActiveX对象的创建,这是我无法要求每个最终用户在IE9浏览器中启用ActiveX对象的可能。因此,我想从客户端传递文件并获得服务器端代码中的文件大小,这在IE9,8中并不适合我。 – 2012-04-30 16:05:12

+0

我做了一些研究。显然这种方法使用的是HTML5 API,所以在任何版本的IE中都不支持。由于ActiveX不存在问题,唯一的方法就是使用Flash – tedski 2012-04-30 23:59:05