zoukankan      html  css  js  c++  java
  • 使用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内部的东西可以用自己框架或者自己的类来实现上传的功能,这里只是一个示例
  • 相关阅读:
    git
    redis
    Hexo-butterfly-magicv3.0.1(持续更新中....)
    转发好文章1
    0x07 Nagios Notifications
    0x06 nagios监控状态
    0x05 Nagios Host Check
    0x03 Nagios Plugins介绍
    0x02 Nagios CGI的认证和授权
    0x01 Nagios配置文件
  • 原文地址:https://www.cnblogs.com/azhw/p/4661939.html
Copyright © 2011-2022 走看看