留言板功能+JSONP解决AJAX跨域

版权声明:Callback_heaven©版权所有 https://blog.csdn.net/weixin_41564885/article/details/80828431

简单的留言板功能:

预览图:

实现功能:

验证+异步存储数据库

HTML:

<div class="basic-grey">
	<h1>留言区
	<span>您可以在这里写出您的留言</span>
	</h1>
	<label>姓名:</label>
	<input type="text" name="" placeholder="请输入您的姓名" class="ly_name">
	<span class="ly_name_warning">您的姓名有误!</span>
	<label>联系方式:</label>
	<input type="text" name="" placeholder="请输入您的联系方式" class="ly_phone">
	<span class="ly_phone_warning">您的联系方式有误!</span>
	<div class="lyc_container">
	<label>留言区:</label>
	<textarea id='memo' class="ly_text" style="resize: none;" placeholder="请输入您的留言"></textarea>
	<span class="ly_text_warning">留言内容不能为空!</span>
	<br>
	<span> </span>
	<input type="button" class="sub button" value="点击留言">
	<input type="button" class="res button" value="点击重置">
	</div>
</div>

CSS:

.basic-grey {
		margin-left:auto;
		margin-right:auto;
		max-width: 500px;
		background: #F7F7F7;
		padding: 25px 15px 25px 10px;
		font: 12px Georgia, "Times New Roman", Times, serif;
		color: #888;
		text-shadow: 1px 1px 1px #FFF;
		border:1px solid #E4E4E4;
		}
		.basic-grey h1 {
		/*居中*/
		font-size: 25px;
		padding: 0px 0px 10px 40px;
		display: block;
		border-bottom:1px solid #E4E4E4;
		margin: -10px -15px 30px -10px;
		color: #888;
		}
		.basic-grey h1>span {
		display: block;
		font-size: 11px;
		padding-top:10px;
		}
		.basic-grey label {
		display: block;
		margin: 0px;
		}
		.basic-grey label>span {
		float: left;
		width: 20%;
		text-align: right;
		padding-right: 10px;
		margin-top: 10px;
		color: #888;
		}
		.basic-grey input[type="text"], .basic-grey input[type="email"], .basic-grey textarea, .basic-grey select {
		border: 1px solid #DADADA;
		color: #888;
		height: 30px;
		margin-bottom: 16px;
		margin-right: 6px;
		margin-top: 2px;
		outline: 0 none;
		padding: 3px 3px 3px 5px;
		width: 70%;
		font-size: 12px;
		line-height:15px;
		box-shadow: inset 0px 1px 4px #ECECEC;
		-moz-box-shadow: inset 0px 1px 4px #ECECEC;
		-webkit-box-shadow: inset 0px 1px 4px #ECECEC;
		}
		.basic-grey textarea{
		padding: 5px 3px 3px 5px;
		font-size: 14px;
		}
		.basic-grey textarea{
		height:100px;
		}
		.basic-grey .button {
		background: #E27575;
		border: none;
		padding: 10px 25px 10px 25px;
		color: #FFF;
		box-shadow: 1px 1px 5px #B6B6B6;
		border-radius: 3px;
		text-shadow: 1px 1px 1px #9E3F3F;
		cursor: pointer;
		}
		.basic-grey .button:hover {
		background: #CF7A7A
		}
		.res{
			position: absolute;
			left:145px;
		}
		.ly_name_warning{
			display: none;
			color:red;
		}
		.ly_text_warning{
			display: none;
			color:red;
			position: absolute;
			top:60px;

		}
		.ly_phone_warning{
			display: none;
			color:red;
		}
		.lyc_container{
			position: relative;
		}

JS:

    <script type="text/javascript" src="jquery-3.3.1.min.js"></script>
<script type="text/javascript">
	$(document).ready(function(){
		var all = $('.basic-grey');
		var ly_text = all.find(".ly_text");	//留言内容
		var ly_name = all.find('.ly_name');	//留言人姓名
		var ly_phone = all.find('.ly_phone');	//留言人电话
		var local_time = new Date();	//留言时间
		var ly_time = local_time.toLocaleString();//转换
		var reg_mobelphone = /^1[3|4|5|8][0-9]\d{4,8}$/;// 移动电话正则表达式
		var reg_telphone = /^0\d{2,3}-[1-9]\d{6,7}$/; //固定电话正则表达式
		var reg_name =  /^[\u4E00-\u9FA5A-Za-z]+$/;//中/英文姓名正则表达式
		var btn = all.find(".sub");
		var res = all.find(".res");
		var ly_name_warning = all.find('.ly_name_warning');
		var ly_text_warning = all.find('.ly_text_warning');
		var ly_phone_warning = all.find('.ly_phone_warning');
		//重置按钮事件
		res.click(function(){

			if(ly_text.val() !== "" || ly_name.val() !== '' || ly_phone.val() !== ''){

					ly_name.val("");

					ly_text.val("");

					ly_phone.val("");
			}else{

				return

			}
		})

		btn.click(function(){
			//验证姓名
			if(ly_name.val() == ''){

				ly_name_warning.show();

				ly_name_warning.html("姓名不能为空");

				return;

			}else if(!reg_name.test(ly_name.val())){

				ly_name_warning.show();

				ly_name_warning.html("您填的姓名有误");

				return;
			}else{
				ly_name_warning.hide();
			}
			
			//验证手机号	
			if(ly_phone.val() == ''){

				ly_phone_warning.html("手机号不能为空");

				ly_phone_warning.show();

				return;

			}
				
			
			if(reg_mobelphone.test(ly_phone.val())){



				ly_phone_warning.hide();
					
			}else if(reg_telphone.test(ly_phone.val())){
				
				ly_phone_warning.hide();

			}else{

				ly_phone_warning.show();

				ly_phone_warning.html("您的联系方式有误!");

				return;
			}

			
			//验证留言信息
			if(ly_text.val() == ""){

				ly_text_warning.show();

				ly_text_warning.html("留言信息不能为空");

				return;

			}else{

				ly_text_warning.hide();
			}
				//发送ajax请求
			$.ajax({
				url:"http://5ba35398.ngrok.io/message.php",
				type:"get",
				contentType:'application/json;charset=utf-8',
				async:true,
				dataType:"jsonp",
				jsonp:"jsoncallback",
				data:{
					content:ly_text.val(),
					name:ly_name.val(),
					phone:ly_phone.val(),
					time:ly_time,
					act:"add"
				},
				//姓名 联系方式 时间
				success:function(data){

					if(data.error == 0){

						alert("留言成功");
					}

				},
				error:function(XMLHttpRequest, textStatus, errorThrown){

				   $("div").html(textStatus);

				   $("div").append("<br/>"+XMLHttpRequest.status);

				   $("div").append("<br/>"+XMLHttpRequest.readyState);

				   $("div").append("<br/>"+XMLHttpRequest.responseText);

				}
			})

		})
	})

PHP:

 <?php
 include_once "init.php";  
    $callback = $_GET['jsoncallback'];
     $act = $_GET["act"];//接口请求标识  
     switch ($act) {  
        case 'add'://提交留言  
            $content = $_GET["content"];
            $ly_time = $_GET["time"];
            $name = $_GET["name"];
            $phone = $_GET["phone"];
            $time = time(); 
            $times = date("Y-m-d H:i:s",$time);  
            $query = "INSERT INTO message_text(id,content,name,phone,message_time) VALUES(null,'{$content}','{$name}','{$phone}','{$ly_time}')";  
            mysqli_query($link,$query);  
            $insertId = mysqli_insert_id($link);  
            if($insertId>0){  
                $arr = ["error"=>0,"id"=>$insertId,"time"=>$times];  
               exit($callback."(".json_encode($arr).")");
            }  
            else{  
                $arr = ["error"=>1,"msg"=>"留言失败,请重试!"];  
                exit($callback."(".json_encode($arr).")");
            }  
            break;  
              
 }

遇到的问题:

跨域问题,数据可以发送但是调用error函数

解决:

AJAX中添加

jsonp:"jsoncallback"

PHP中添加

$callback = $_GET['jsoncallback'];

返回形式为:

exit($callback."(".json_encode($arr).")");

成功效果:


参考文章:https://blog.csdn.net/u011078940/article/details/51823143,https://blog.csdn.net/sexy_squirrel/article/details/53817829

猜你喜欢

转载自blog.csdn.net/weixin_41564885/article/details/80828431