分享编程~
 

纯JavaScript异步加载AJAX提交数据JS异步请求

仅仅为了使用一个AJAX去加载JQuery库是不明智的,不使用JQuery,用纯JavaScript实现AJAX异步请求

天天特卖抢好货

有时候仅仅只用到异步提交就加载第三方js库是不明智的,纯js异步提交,javascript自写ajax方法,不依赖其他插件,调用方便。

demo.html源码:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
    <title>纯js异步提交javascript自写ajax方法</title>
	<meta name="keywords" content="纯js异步提交,javascript自写ajax方法">
    <meta name="description" content="纯js异步提交javascript自写ajax方法,不依赖其他插件,调用方便。">
<style>
	
</style>
</head>
<body>

<div class="box">
	<input type="text" id="param_id" /><br><br>
	<input type="text" id="param_name" /><br><br>
	<input type="file" id="param_file" /><br><br>
	<input type="hidden" id="param_hidden" />
    <button onclick="sub_fun();">提交</button>
</div>
</body>
<script type="text/javascript">
	
	/**
	 * js异步提交自写ajax方法
	 */
	var zhlC_ajax = {
		get: function(url,fn,s,e){
			// XMLHttpRequest对象用于在后台与服务器交换数据
			var xhr=new XMLHttpRequest();
			xhr.open('GET',url,false);
			xhr.onreadystatechange=function(){
				// readyState == 4说明请求已完成
				if(xhr.readyState==4){
					if(xhr.status==200 || xhr.status==304){
						console.log(xhr.responseText);
						s(xhr.responseText);
					}else{
						e(xhr.responseText);
					}
				}
			}
			xhr.send();
		},
		post: function(url,data,s,e){
			var xhr = new XMLHttpRequest();
			xhr.open('POST',url);
			xhr.onreadystatechange=function(){
				if (xhr.readyState==4){
					if (xhr.status==200 || xhr.status==304){
						s(xhr.responseText);
					}else if(xhr.status>=400){
						e(xhr.responseText);
					}
				}
			}
			xhr.send(data);
		}
	};

	/**
	 * 选择文件获取文件base64编码
	 */
	window.onload = function(){
		var imagesfile = document.getElementById("param_file");
		imagesfile.onchange = function () {
			var file = imagesfile.files[0];
			//判断文件大小不能超过10M ,免去服务器的压力。
			if (file.size > 10 * 1024 * 1024) {
				alert("上传文件必须 < 10Mb!");
				return false;
			}
			// 获取文件
			var reader = new FileReader();  // 实例化
			reader.readAsDataURL(file);     // 加载
			reader.onload = function () {   // 异步加载完成
				console.log(reader);
				var base64 = reader.result; // 获取 base64 DataURL
				document.getElementById("param_hidden").value = base64;
			}
		}
	}

	/**
	 * 数据提交方法
	 */
	function sub_fun(){
		var url = 'test.php';
		var id = document.getElementById('param_id').value;
		var name = document.getElementById('param_name').value;
		var base64 = document.getElementById("param_hidden").value;
		console.log(id);console.log(base64);
		if(!id || !name || !base64){
			alert('参数不能为空');return;
		}
		var uploadimg = base64File(base64);
		var formData = new FormData(); // 实例化创建form表单
		formData.append("id", id);
		formData.append("name", name);
		formData.append("uploadimg", uploadimg); // 增加参数
		//var param = 'id='+id+'&name='+name;
		zhlC_ajax.post(url,formData,function(data){
			console.log('请求成功');
			var newDate = JSON.parse(data);
			if(newDate.code == 10000){
				alert('成功');
			}else{
				alert('失败'+newDate.msg);
			}
		},function(data){
			console.log('请求失败');
			alert('网络异常,稍后再试');
		});
	}

    /**
     * 将图片Base64数据转成文件
     */	
	function base64File(base64Data) {
		var arr = base64Data.split(','), mime = arr[0].match(/:(.*?);/)[1],
		bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
		while (n--) {
			u8arr[n] = bstr.charCodeAt(n);
		}
		return new Blob([u8arr], { type: mime });
	}


</script>
</html>

服务端接收数据以php为例:

<?php
	$result = array('code'=>'40000','data'=>array());
	$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';
	$name = isset($_REQUEST['name']) ? $_REQUEST['name'] : '';
	$result['data']['id'] = $id;
	$result['data']['name'] = $name;
	if(!isset($_FILES)){
		echo json_encode($result);exit;
	}
	$file = $_FILES['uploadimg']['tmp_name'];
	$path = './upload/';
	if(!file_exists($path)){
		mkdir($path,0777);
	}
	$newname = time().rand(100,999);
	// base64转blob时pathinfo($_FILES["multipartFile"]["name"], PATHINFO_EXTENSION);方式获取不到文件扩展名
	$upfile = $path.$newname.'.jpg'; // 默认给个后缀
	if(move_uploaded_file($file,$upfile)){
		$suf = getFileType($upfile); // 上传成功后获取文件真实扩展名
		$updatefile = $path.$newname.'.'.$suf;
		$re = rename($upfile, $updatefile); // 修改文件
		if($re){
			//@unlink($upfile);		// 删除老的文件
			$upfile = $updatefile;	// 重置新的文件路径
		}
		$result['code'] = 10000;
		$result['data']['filepath'] = substr($upfile, 1);
	}
	echo json_encode($result);exit;
	
	/**
	 * 判断文件类型
	 */
	function getFileType($file){
        $filehead = fopen($file,'r');
        $bin = fread($filehead, 2); //读取文件2字节
        fclose($filehead);
        $data = unpack('C2chars', $bin);
        $type_code = intval($data['chars1'].$data['chars2']);
        switch ($type_code) {
            case 7790:
                $fileType = 'exe';
                break;
            case 7784:
                $fileType = 'midi';
                break;
            case 8075:
                $fileType = 'zip';
                break;
            case 8297:
                $fileType = 'rar';
                break;
            case 255216:
                $fileType = 'jpg';
                break;
            case 7173:
                $fileType = 'gif';
                break;
            case 6677:
                $fileType = 'bmp';
                break;
            case 13780:
                $fileType = 'png';
                break;
            default:
                $fileType = '';
                break;
        }
        return $fileType;
    }
	


上一篇:windows系统下自己编写垃圾清理软件下一篇:CSS3实现呼吸灯效果
赞(2) 踩(0)
您说多少就多少,您的支持是我最大的动力
赏金
微 信
赏金
支付宝
本文连接: https://www.yj521.com/article/7.html
版权声明: 本文为原创文章,版权归《越加网》所有,分享转载请注明出处!