使用ajax异步提交表单

虽然这篇文章的标题是提交表单,但是主要的难点在于使用ajax提交文本域的内容,

在工作中的经常会需要ajax跨域的问题,通常的需求使用jsonp就可以得到解决,但是当前项目中有一个图片服务器,客户端需要直接上传图片到图片服务器中,这就产生了一个跨域post提交文件的问题,很显然jquery本身jsonp只支持get方式的异步提交肯定是不行

其中也尝试过使用ifrmae的方法来提交数据,在网上有,但是效果不理想,并且也很复杂的样子,最后选择出了jquery.from.js 这个插件,可以实现异步的表单提交,

先是客户端代码的html文件

主要加载两个文件 juery 和 jquery.from.js

代码如下

 1 <script src="jquery.js"></script>
 2 <script src="jquery.form.js"></script>
 3 <form id="myform" method="post" action="http://images.byshop.com/wechat/imgFormUpload" enctype="multipart/form-data">
 4     <input type="file" name="userfile[]"  multiple id="img_file">
 5     <input type="submit" value="shangchuan">
 6 </form>
 7 <input type="button" value="ajax_submit" onclick="imgFormUpload()">
 8 <script>
 9     function imgFormUpload() {
10         $("#myform").ajaxSubmit({
11             dataType: ‘json‘,
12             success: function (data) {
13                 alert("submit success");
14             }
15         });
16     }
17 </script>

服务端php代码

<?php
header("Access-Control-Allow-Origin: *");
defined(‘BASEPATH‘) OR exit(‘No direct script access allowed‘);

/**
 * 微信方法控制器
 *
 * @author azhw
 * @create_tiem 2015-07-17
 * @edit_time 2015-07-20
 * @editer azhw
 */
class Wechat extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->helper(array(‘dir‘, ‘url‘));
    }

    public function imgFormUpload(){
        $re_arr = array();
        if(isset($_FILES[‘userfile‘][‘tmp_name‘]) && isset($_POST[‘path‘]) && isset($_POST[‘filename‘])){
            $tmp_name = $_FILES[‘userfile‘][‘tmp_name‘];var_dump($tmp_name);
            $filename = $_POST[‘filename‘];
            $filename_arr = explode(‘,‘, $filename);
            $path = $_POST[‘path‘];
            if(count($tmp_name) === count($filename_arr)){
                mkdirs(FCPATH.$path);//这是如果不存在就递归创建目录的函数
                for($i = 0; $i < count($tmp_name); $i++){
                    move_uploaded_file($tmp_name[$i], FCPATH.$path.$filename_arr[$i]);
                }
                $re_arr[‘code‘] = 1;
                $re_arr[‘response‘] = ‘success‘;
            }
            else{
                $re_arr[‘code‘] = 100101;
                $re_arr[‘response‘] = ‘文件数量和文件名称数量不统一‘;
            }
        }
        else{
            $re_arr[‘code‘] = 100100;
            $re_arr[‘response‘] = ‘丢失关键参数‘;
        }
//        $re_arr[‘code‘] = 100101;
//        $re_arr[‘response‘] = ‘文件数量和文件名称数量不统一‘;
        echo json_encode($re_arr);
    }
}

这段代码中需要注意的是header("Access-Control-Allow-Origin: *");   异步ajax需要这个头信息

if(isset($_FILES[‘userfile‘][‘tmp_name‘]) && isset($_POST[‘path‘]) && isset($_POST[‘filename‘])){...}  这里判断的稍微有点多,我的path 和filename都是从客户端传递来的参数
move_uploaded_file($tmp_name[$i], FCPATH.$path.$filename_arr[$i]); 关于for内部的东西可以用自己框架或者自己的类来实现上传的功能,这里只是一个示例
时间: 2024-10-28 06:33:13

使用ajax异步提交表单的相关文章

ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码

首先提出一个问题:在做网站开发的时候,用到了验证码来防止恶意提交表单,那么要如何实现当验证码错误时,只是刷新一下验证码,而其它填写的信息不改变? 先说一下为什么有这个需求:以提交注册信息页面为例,一般注册都需要用户填一个验证码信息(防止机器恶意注册),并且这个验证码会提交到后台去进行比对,若是错了则不会检查其他提交信息而直接返回浏览器端提示验证码错误.若是简单地用form表单直接将数据提交到指定的url,当验证码填写错误的信息返回浏览器端的时候,不可避免整个页面都会重新刷新一次,这是用户所不想要

MVC之AJAX异步提交表单

第一种用法: 在MVC中,依然可以使用ajax校验,跟在WebForm中的使用时一样的,唯一的区别就是将以前的URL路劲改为访问控制器下的行为 前台 <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/Scripts/jquery-1.8

Jquery异步提交表单到Action

转载请注明出处:jiq?钦's technical Blog 一 需求 出于兴趣最近在做分布式注册中心的管理界面,其中一个模块是左边的树显示所有ZooKeeper节点,使用的ztree实现,点击树节点的时候会查询后台action返回节点数据,显示在右边区域,为了不刷整个页面,所以采用的是Jquery的异步请求Action返回JSON数据,参考我的这篇文章,然后使用Jquery的load函数载入显示节点信息的nodeInfo.jsp,以返回的JSON数据为参数. 效果如下: 现在的需求是:我要在编

JQuery 异步提交表单

1.使用post提交方式 2.构造表单的数格式 3.结合form表单的submit调用ajax的回调函数. 使用 jQuery 异步提交表单代码: 代码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>无标题页</title> </head> <script src="js/jquery-1.4.2.js"></sc

Ajax方式提交表单的常见编码类型总结

用Ajax方式提交表单,决定编码类型的是请求头中Content-Type,不同的值对应不同的提交和回调处理方式.而且,在项目中我们会用到前端的库或者框架,他们对于不同的Content-Type也有不同的参数写法,本文将以jQuery和AngularJS,加上XMLHttpRequest共三种方式为例,详细介绍不同Content-Type的发送请求的方式.本文考虑的Content-Type类型,共有如下几种: application/x-www-form-urlencoded multipart/

SpringMVC中的异步提交表单

1.前言 近期在做一个项目,前台框架用的是EasyUI+SpringMVC,因为对SpringMVC不太了解,所以刚開始接触的时候有点吃力,在此通过一个EasyUi中的DataGrid表格来总结一下.  2.SpringMVC中的View向控制器传參 在SpringMVC中,View怎样向控制器传參数呢? 尤其是Form表单提交的时候,详细有例如以下几种方式 2.1 HttpServletRequest 能够通过getParameter()方法来获取前台传过来的參数 2.2 Form表单绑定 /

Jquery 异步提交表单(post)

方法  $.post(url,params,function(data){}); 表单的action,method属性都没有 button的type不能为submit只能为button 前台代码 <script type="text/javascript"> $(function()         {    //异步提交表单  $("#save").click(function(){      $.post("${ctx}/order/sav

Asp.net Mvc Ajax.BeginForm提交表单

之前Mvc中一直用Html.BeginForm提交表单,即如下: @using (Html.BeginForm("Add", "News", FormMethod.Post, new { enctype = "multipart/form-data" })) { <table> <tr> <td><span style="color:red">*</span><

jQuery通过AJAX快速提交表单数据

当表单数据项很多时,手动获取表单项的值将变得效率低下,结合jQuery提供的函数serialize(),我们可以实现快速获取数据并提交表单数据. 请看下面的表单: <form id="fm"> <table> <tr> <td>姓名</td> <td> <input type="text" name="name" /> </td> </tr>