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

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

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

先是客户端代码的html文件

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

代码如下

 <script src="jquery.js"></script>
<script src="jquery.form.js"></script>
<form id="myform" method="post" action="http://images.byshop.com/wechat/imgFormUpload" enctype="multipart/form-data">
<input type="file" name="userfile[]" multiple id="img_file">
<input type="submit" value="shangchuan">
</form>
<input type="button" value="ajax_submit" onclick="imgFormUpload()">
<script>
function imgFormUpload() {
$("#myform").ajaxSubmit({
dataType: 'json',
success: function (data) {
alert("submit success");
}
});
}
</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内部的东西可以用自己框架或者自己的类来实现上传的功能,这里只是一个示例

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

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

    首先提出一个问题:在做网站开发的时候,用到了验证码来防止恶意提交表单,那么要如何实现当验证码错误时,只是刷新一下验证码,而其它填写的信息不改变? 先说一下为什么有这个需求:以提交注册信息页面为例,一般 ...

  2. jquery ajax异步提交表单数据

    使用jquery的ajax方法可以异步提交表单,成功后后台返回json数据,回调函数处理,可以不用刷新页面,达到异步的目的: 处理表单的数据可以用serialize()方法进行序列化,而如果提交的数据 ...

  3. MVC之AJAX异步提交表单

    第一种用法: 在MVC中,依然可以使用ajax校验,跟在WebForm中的使用时一样的,唯一的区别就是将以前的URL路劲改为访问控制器下的行为 前台 <html> <head> ...

  4. 使用AJAX异步提交表单的几种方式

    方式一 手工收集所有的用户输入,封装为大的“k1=v1&k2=v2…”键值对形式,使用$.post(url, data,fn)把数据提交给服务器 $.ajax({ type:'post', u ...

  5. 雷林鹏分享:jQuery EasyUI 表单 - 创建异步提交表单

    jQuery EasyUI 表单 - 创建异步提交表单 本教程向您展示如何通过 easyui 提交一个表单(Form).我们创建一个带有 name.email 和 phone 字段的表单.通过使用 e ...

  6. jquery ajax异步提交表单数据的方法

    使用jquery的ajax方法可以异步提交表单,成功后后台返回json数据,回调函数处理,可以不用刷新页面,达到异步的目的: 处理表单的数据可以用serialize()方法进行序列化,而如果提交的数据 ...

  7. Ajax实现提交表单时验证码自动验证(原创自Zjmainstay)

    本文通过源码展示如何实现表单提交前,验证码先检测正确性,不正确则不提交表单,更新验证码. 1.前端代码 index.html <!DOCTYPE html> <html> &l ...

  8. SpringMVC中的异步提交表单

    1.前言 近期在做一个项目,前台框架用的是EasyUI+SpringMVC,因为对SpringMVC不太了解,所以刚開始接触的时候有点吃力,在此通过一个EasyUi中的DataGrid表格来总结一下. ...

  9. jQuery.Form.js 异步提交表单使用总结

    jQuery.Form.js 是一个用于使用jQuery异步提交表单的插件,它使用方法简单,支持同步和异步两种方式提交. 第一步:引入jQuery与jQuery.Form.js <script ...

随机推荐

  1. HTML5图片预览

    两种方式实现 URL FileReader <!DOCTYPE HTML><html>    <head>    <meta charset="ut ...

  2. 【dfs or 最短路】【HDU1224】【Free DIY Tour】

    路径只能由小序号到大序号..(起点可以视为最小的序号和最大的序号) 问怎么走 happy值最大.. DFS N=100 且只能小序号到大序号 显然dfs可以过.. 但是存路径的时候sb了.....应该 ...

  3. css float笔记

    float 1.破坏性,让设置了float属性的元素脱离文档流 2.包裹性:div设置了float之后,其宽度会自动调整为包裹住内容宽度,而不是撑满整个父容器.如果没有包裹性,如何实现文字环绕(flo ...

  4. JQ对JSON的增删改

    var userlist={ }, } } //方法一 userlist.row1.sex="女";//添加 userlist.row3={name:};//添加 userlist ...

  5. Spring事务讲解示例

    Spring 事务Transaction1.事务的属性1.1 事务隔离IsolationLevel1.2 事务传播PropagationBehavior1.3 事务超时Timeout1.4 只读状态R ...

  6. JSON 解析第三方框架

    常见的 JSON 解析第三方框架 JSONKit(最快) SBJson TouchJSON 以上三个框架的性能依次降低! 介绍 JSONKit 第三方框架的目的 JSON 的解析并不是表面上那么简单 ...

  7. Spark Streaming 实现读取Kafka 生产数据

    在kafka 目录下执行生产消息命令: ./kafka-console-producer  --broker-list nodexx:9092 --topic  201609 在spark bin 目 ...

  8. Java与C++相异的地方

    继承标识:Java使用extends/implement,C++使用: super:调用父类的某些东西 instanceof:RTTI机制(A is instanceif B) final:类似于C+ ...

  9. imagemagick 图像处理扩展

    做图像处理的一个工具. http://www.imagemagick.org/script/command-line-processing.php 支持命令行模式,支持接口调用.php 等等都可以,看 ...

  10. Canvas、Paint、的简单使用及辅助类(Path、Shader、简介)

    1.Canvas类 作用:1.绘制各种图形.图片.字等.2.提供各种方法进行坐标变换(rotate.scale.skew.translate) 获取Canvas:一般是子类继承View并重写onDra ...