cczhy

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
Ajax实现添加学生的方法,在Django中结合Ajax实现。
<a id="addModal">对话框的方式添加</a>
然后在<script>中添加响应函数。在同一个html中,写在script,于是下面的函数在页面加载时自动执行。
$(function(){
    $(#addModal).click(function(){
        alert(123)
        $('#shadow,#addModal').removeClass('hide');//注意一次性找到多个id的方法,移除隐藏class的写法
    }
}
)

同样,函数如果返回false,同样能够阻止href中的默认跳转事件发生。
<a href="http://www.baidu.com/" id="addModal">添加</a>
如果在上面的响应函数最后添加return false,那么不会跳转到百度。

这样的方式依赖jQuery,需要先导入:<script src="/static/jquery-1.12.4.js"></script>

Ajax实现响应的方法:
首先在HTML中添加div层。
<style>
//默认隐藏
    .hide{
        display:none;
    }
//定义遮罩层
    .shadow{
        position:fixed;//相对于窗口来说,固定位置。
        left:0;
        right:0;
        bottom:0;
        top:0;
        background-color:black;//设置颜色实现遮挡效果
        opacity:0.4;//设置透明度,实现灰度的效果,不至于一片黑色什么都看不见
        z-index:999;//设置图层的上下层关系
    }
//定义对话框层
    .add-modal{
        z-index:1000;比刚才设置的遮罩层的999大就行
        position:fixed;
        left:50%;
        top:50%;//这样right & bottom就不用写了,已经设定明确好位置
        //不设置opacity,没有透明度
        width:400px;
        height:300px;
        background-color:white;//这样就可以直接显示出来
        margin-left:-200px;//往左边稍微移动
        margin-top:-200px;//向上稍微移动
    }
</style>
<div class="shadow hide" id="shadow"> //这是遮罩层
</div>

<div class="add-modal hide" id="addModal">
<p>
    <input id="addName" type="text" name="name" placeholder="姓名"/>//placeholder属性会在输入框中灰色显示缺省值,但IE低版本不支持
</p>
<p>
<select name="classID" id="addClassId">//为方便js取值,设置id值
{% for row in class-list %}
    <option value="{{ row.id }}">{{ row.title }}</option>
    {% endfor %}
</select>
</p>
</div>//这是对话框层
增加添加按钮,注意Ajax响应不再form中,type不能是submit类型。
<input id="btnAdd" type="button" value="添加学生" />
//增加一个span,用于显示成功或失败信息
<span id="addError" style="color:red;"></span>
然后在script中添加响应函数
$(function(){
    $('#btnAdd').click(function(){
        $.ajax({
            url:'/modal_add_student/',
            type:'POST',
            data:{'name':$('#addName').val(),'class_id':$('#addClassId').val(),
            sucess:function(arg){
                console.log(arg);
                arg = JSON.parse(arg);//convert the arg to object
                if(arg.status){
                    location.reload();
                }else{
                    $(#addError).text(arg.message);
                }
            }
        })
    })
})

在url.py中添加网址的对应函数关系:
path(r'^modal_add_student/',views.modal_add_student),

在view.py中添加处理函数:
def modal_add_student(request):
    //首先定义返回值
    ret = {'status':True,'message':None}
    try:
        name = request.POST.get('name')//注意ajax中的数据也是使用post的方式获取的
        class_id = request.POST.get('class_id')
        sqlheper.modify('insert into student(name,class_id) values(%s,%s)',[name,class_id,]
    except Exception as e:
        ret['status']=False
        ret['message']=str(e)
    return HttpResponse(json.dumps(ret))

 

posted on 2020-08-08 08:15  cczhy  阅读(299)  评论(0)    收藏  举报