none
【AJAX】ajax调用问题 急急急 RRS feed

  • 问题

  • 问题描述,我想利用AJAX来判断上传图片的大小,不符合要求在不刷新页面的前提下给出提示。我的思路是这样实现的;

    页面上传页  UpLoadImage.aspx 代码如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>图片上传</title>
        <script type="text/javascript" src="../js/AjaxInfo.js"></script>
        <script type="text/javascript">
        var parten =/^\s*$/;//半角正则
        function CheckIsNull()
        {

                if(ImageLeng()==false)
                {
                    alert('文件不能大于300K');
                  
                    return false;
                }
          
        }
        </script>
    <style type="text/css">
    *{ font-size:12px;}
    </style>   
    </head>
    <body>
        <form id="form1" runat="server">
            请选择图片:<asp:FileUpload ID="FileUpload1" runat="server" />
            <asp:Button ID="btnUpload" runat="server" Text="上传" OnClick="btnUpload_Click" OnClientClick="return CheckIsNull()" />&nbsp;<br />
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<asp:CheckBox ID="pic" runat="server" Checked="True" ForeColor="Red" Text="是否添加水印" />
            &nbsp;
            <asp:CheckBox ID="firstPic" runat="server" Text="设置标头图" /><br />
            <br />
            <div>
                请注意,上传的图片必须为JPG、GIF、BMP或PNG格式,其大小不超过300K。请不要重复上传图片。<br />
                &nbsp;</div>
        </form>
    </body>
    </html>

     

    AjaxInfo.js 代码如下:


    //创建xmlHttp对象
           function createXMLHTTP()
                {
                var xmlHttp=null;
                      try
                      {
                      xmlHttp=new ActiveXObject("MSXML2.XMLHTTP");
                      }
                      catch(e)
                      {
                      try
                      {
                      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                      }
                      catch(e2)
                      {
                     // xmlHttp=false;
                      }
                      }
                     if(!xmlHttp && typeof XMLHttpRequest!='undefined')
                      {
                      try
                      {
                      xmlHttp=new XMLHttpRequest();
                      }
                      catch(e)
                      {
                     // xmlHttp=false;
                      }
                       
                      }
                      return xmlHttp;
                }

     

    //判断上传图片大小
    function ImageLeng()
    {
        var objxml = createXMLHTTP();
        objxml.open("get","UpLoadImage.aspx",false);
        objxml.send(null);
        if(objxml.readyState=="4" && objxml.status=="200")
        {
            var sResult=objxml.responseText;
                if(parseInt(sResult)>300000)
                {
                    return false;
                }
                else
                {
                    return true;
                }

        }
    }

     

    UpLoadImage.aspx.cs 代码如下;

        protected void Page_Load(object sender, EventArgs e)
        {
          
            Response.ContentType = "text/plain";

                if (FileUpload1.HasFile)
                {
                    if (FileUpload1.PostedFile.ContentLength > 300000)
                    {
                        Response.Write(FileUpload1.PostedFile.ContentLength.ToString());
                    }


                }
                Response.End();
       
        }

     

     

    现在发生这么一种情况,程序判断都正确,但没有弹出对话框,而且还刷新了UpLoadImage.aspx页面,请问高手,我这里有问题么?感谢感谢

     

     

    • 已移动 孟宪会Moderator 2010年3月21日 3:26 (发件人:.NET Framework 一般性问题讨论区)
    2010年3月20日 5:03

答案

全部回复

  • 你好,

    事实上这不是ajax了,你是想利用脚本来检测服务器端的返回信息并做相应的处理。

    事实上还是通过服务器端的button整个页面都刷新了。

    对于检测上传文件大小,如果在客户端做需要用ACtivex,可以试试下面的方法http://www.svnhost.cn/Download/Detail-522.shtml

    如果在服务器端,微软的ajaxtoolkit里面就有类似的控件,可以参考下面的地址:http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx


    Microsoft Online Community Support
    2010年3月22日 3:05
  • 版主为什么这么认为这不是AJAX呢?你这么一说会给小弟我带来很大的迷惑,申请XMLHttp对象,并且我做到了无刷新,为什么说这不是AJAX呢?
    2010年3月22日 16:06
  • 你好,据我了解没有所谓真正意义上的异步上传文件。

    你这个是在服务器端判断上传文件大小的,那么文件肯定已经被上传到服务器端了。

    但是你的代码里并没有将文件post到服务器端啊,那你是如何检测文件大小呢。如果都能检测文件大小了,那干嘛还要经过再一次提交才能保存文件呢。

    你的脚本仅仅是发送一个get请求,又没有提交任何数据。其次你测试下你的代码,在你发送请求后objxml.status=="",第一个if语句不满足那你是怎么办,没有相应的处理。

    所以CheckIsNull()方法并不返回false,接着触发了服务器button的submit,文件被post到服务器端了。服务器端做完检测后直接输出了下面的内容:

    FileUpload1.PostedFile.ContentLength.ToString()


    Microsoft Online Community Support
    2010年3月23日 2:21