form表单可不可以写回调函数?或者JQuery是否能用ajax来实现form提交

form表单能否写回调函数?或者JQuery是否能用ajax来实现form提交
上传图片经过csdn朋友的帮助已经解决了.不过问题总是一个接着一个的出现.
现在我需要获得已上传的文件保存位置.但是因为图片上传是用form表单提交的,所以没法走ajax的回调函数,自然没法获得路径了.而且如果同步执行 form表单提交以及页面保存的话,ajax的请求要优先与form表单的级别。也就是说先 document.form1.submit();
$.ajax({});
插了断点我才发现是是先执行了ajax的请求然后回过头在执行的form的submit.

所以想请教各位不用ui插件的前提下,form是否有回调函数?如果没有,那么ajax能否提交form表单,这样我就可以用ajax的回调来获得保存路径做下一步处理了....问为什么非要用ajax提交form?而不直接用ajax代替form。因为如果用ajax的话,我的action没法获得到IO流的file对象,用form就可以自动获得只要遵循一定的明明规则就可以了,struts2里有的.

如果有办法的话最好具体点,谢谢了....其他办法也可以的

------解决方案--------------------
 function addData() {
var formData=$("#flowControlForm").serialize();     
$.ajax({
type: "POST",
url: "flowControl.do?method=addFlowPublish,
processData:true,
data:formData,
success: function(data){
 if(data=="1"){
    alert("用户提交失败!");
  }
}
});  
   }
}

ajax请求可以直接提交表单 var formData=$("#flowControlForm").serialize();  flowControlForm是表单的id值
------解决方案--------------------
引用:
这个朋友. $("#formId").serialize() 这个我也知道 还有 $("#formId").serializeArry()
不过从来没这么应用过。这样写了以后 后台的file对象该如何处理? 是跟form表单提交一样 自动获取 不需要我手动来接收 还是需要手动接收file对象 以及上传文件的 文件名。


貌似这个方法是不能把File给发到后台去的

如果你想多做一些尝试,可以试试 jquery ajaxfileupload这个插件。

我说说我之前的解决思路吧

页面上是这样的


<script>
   function refresh(addr){
       /*addr就是你上传的文件的具体路径的值。
         你在这里刷新展示地址的控件,把这个值放到控件上。
        */
   }

   /* 当然,你也可以写一些失败之后的处理方法。甚至去轮询后台,通过session中的信息来更新前台的进度条*/
</script>

<form action="这个就不说了吧" target="submitFrame">
    <!--这里是你的元素,文件,属性都在这里-->
</form>

<iframe name="submitFrame" style="display:none"></iframe>



你在JS里控制让form提交,因为form设置了target属性,所以页面不会刷新,刷新的是下面的iframe

后台Action 的Java代码里,这样写,比如你用Struts2



    public void execute(){
           /*
            * 文件的保存之类的操作你肯定已经做完了
            * 接下来从你获取到文件路径开始
            */

          String path = "路径";
          OutputStream out = null;
          try{
              out = response.getOutputStream();
              //这里我忘记是要字符串还是字节数组了,如果是字节数组,就用ISO-8859-1格式转成字节数组
              out.write("<script>parent.refresh(" + path + ");</script>");
              out.flush();
          }catch(Exception e){
              e.printStacktrace();
          }finally{
              if(out != null){
                 try{out.close();}catch(Exception e1){}
              }
          }
    }     




试试吧