用ajax提交form并将返回值显示在网页

简单说一下做的是什么:

一个筛选器

其实就是一个筛选器,当然实际内容比这个多,所以如果采用参数的方法进行传递,非疯掉不可,所以想要用form的形式进行;

解决方案:ajax+form的submit

麻烦:这个方案也有麻烦——就是虽然在前端写的代码少了,但是后端代码多写了,而且复杂程度其实比前端高。

先看前端代码(省略了内容部分):

<form class="tiaojian main_n" id="sxtj">
            <p> 
               <strong>学校类型:</strong>
                <input type="checkbox" name="yike[]" value="yes">医科大学   
                <input type="checkbox" name="yike[]" value="no">非医科大学
            </p>
            <div class="clearfix">
                <p style="float: left;height: 50px;width: 86px"><strong>所属省市:</strong></p>
                <p><span class="xmb"><input type="checkbox" name="city[]" value="安徽">安徽</span><span class="xmb"><input type="checkbox" name="city[]" value="北京">北京</p>
                <strong>学科方向:</strong>
                <input type="checkbox" name="fangxiang[]" value="基础">基础   <input type="checkbox" name="fangxiang[]" value="发展与教育">发展与教育
            </p>
            <p class="anniu">
                <button class="submit" οnclick="return sx()">筛选</button>   <button οnclick="return qbxx()">显示全部学校</button>   <button οnclick="return cxxz()">清空选项</button>
            </p>
        </form>

要点1:checkbox的name属性必须是数组属性,这个对后台很关键,否则,$_POST和$_GET抓不到全部数据;带来的问题是,$_POST['city']得到的是数组,注意,在PHP后台name不带[]

看JS代码:

function sx() {
$.ajax({
        type:"POST",
        url:"./API/shaixuanxx.php?q=0",
        data:$("#sxtj").serialize(),
        error:function (request) {
            alert("网络连接错误");
        },
        success:function (data) {
            $("#xxzsq").html(data);
        }
    });
    return false;
}

要点2:关键在于传输的data是对于form的表单值的序列化;非常重要的一步;

后端代码(PHP):提取数据后输出的部分没写,因为太常规了,没有难度。

if ($q==0){
	$sxtj='city IN '.arr($_POST['city']);
	if (sizeof($_POST['yike'])==1){
		if ($_POST['yike'][0]=='yes'){
			$sxtj=$sxtj.' AND xx_name LIKE "%医%"';
		}else{
			$sxtj=$sxtj.' AND xx_name NOT LIKE "%医%"';
		};
	};
	if (sizeof($_POST['fangxiang'])==2){
		$sxtj=$sxtj.' AND fangxiang regexp '.'"'.$_POST['fangxiang'][0].'|'.$_POST['fangxiang'][1].'"';
	}elseif (sizeof($_POST['fangxiang'])==1){
		$sxtj=$sxtj.' AND fangxiang regexp'.'"'.$_POST['fangxiang'][0].'"';
	};
}

$sql="SELECT id,xx_name FROM jibenxinxi WHERE ".$sxtj;

要点3:因为在从数据库里面取值时条件会很长,所以需要提前先写好一串字符串,要注意的是,因为是字符串,所以必须放在""外,用连接符连接。

因为WHERE  name IN ("xx","xx")的格式比较特殊,("xx","xx")不是数组,所以必须把从ajax传递过来的值先变成这个样子,我自定义了一个函数arr($_POST[])用来做这个。

总体上而言,当有大量数据需要提交,而且要返回大量数据进行使用时还是挺麻烦的。目前我只尝试了这一种方法。希望以后能够有其他方法更高效一些。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值