python+django+dwz ajax form 403

近期用python+django+apache+dwz做一个订单系统,遇到的最头疼的问题就是在用ajax时出现403forbidden错误。最后解决如下:

1.html中:

<form method="post" action="launch_order_do.html" class="pageForm required-validate" οnsubmit="return validateCallback(this, dialogAjaxDone)">{% csrf_token %}

<select  name="teamId" οnchange="selectGroupAndReturnUsers(this.value)">
	                {%for team in teams%}
	                    <option value ="{{team.id}}" class="required">{{team.name}}</option>
	                {%endfor%}
                </select>

2.在index.html中引入所写的js

<script src="http://localhost/zt/a120910consumemanage/javascripts/wangyang.js" type="text/javascript"></script>


3.wangyang.js(放在apache中C:\MyWorks\components\apache2.2\htdocs\zt\a120910consumemanage\javascripts\wangyang.js)实现如下:

function selectGroupAndReturnUsers(value) {
alert(value);
$.ajax( {
        url : "select_group_and_return_users.html",
        type : "post",
        dataType : "text",
        data : "teamId=" + value,
        timeout : 10000,
        error :  function(data){alert("Server didn't return data");},
        beforeSend: function(XMLHttpRequest){
            XMLHttpRequest.setRequestHeader("RequestType", "ajax");
            },
        success : function(data) {
            alert("succ");
            var dataObj = eval("(" + data + ")");// 转换为json对象
            alert(data);
	            if(dataObj.msg == '1') {
	            	document.getElementById("teamLabel").value = "woods";
	            } else {
	            	document.getElementById("teamLabel").value = "123";
	            }
            }
        });
}

4.在urls.py中配置如下:

    url(r'^select_group_and_return_users.html?$', selectGroupAndReturnUsers),

5.在viewsonic.py中调用如下:

teamId = request.REQUEST.get('teamId', "")
    userTeamObjs = A120910ConsumemanageUserTeam.objects.using("zt").filter(team_id = teamId)
    if not userTeamObjs :
        return None
    userTeamObjs[0].user.name
    jsonData={"team":'userTeamObjs', "username":'woods'}
    return HttpResponse(simplejson.JSONEncoder().encode(jsonData), mimetype="application/json")

6.在index中加入如下代码:

<script type="text/javascript">
$(function(){    
    DWZ.init("/b120910consumemanage/dwz.frag.xml", {
//        loginUrl:"loginsub.html", loginTitle:"登录",    // 弹出登录对话框
        loginUrl:"/b120910consumemanage/login.html",    // 跳到登录页面
        debug:false,    // 调试模式 【true|false】
        callback:function(){
            initEnv();
            $("#themeList").theme({themeBase:"themes"});
        }
    });
});
//清理浏览器内存,只对IE起效,FF不需要
if ($.browser.msie) {
    window.setInterval("CollectGarbage();", 10000);
}

//新加处理ajax提交表单的处理方式  
jQuery(document).ajaxSend(function(event, xhr, settings) {  
    function getCookie(name) {  
        var cookieValue = null;  
        if (document.cookie &&document.cookie != '') {  
            var cookies= document.cookie.split(';');  
            for (var i =0; i < cookies.length; i++) {  
               var cookie = jQuery.trim(cookies[i]);  
               // Does this cookie string begin with the name we want?  
               if (cookie.substring(0, name.length + 1) == (name + '=')) {  
                   cookieValue = decodeURIComponent(cookie.substring(name.length + 1));  
                   break;  
               }  
            }  
        }  
        return cookieValue;  
    }  
    function sameOrigin(url) {  
        // url could be relative or schemerelative or absolute  
        var host = document.location.host;// host + port  
        var protocol =document.location.protocol;  
        var sr_origin = '//' + host;  
        var origin = protocol + sr_origin;  
        // Allow absolute or scheme relativeURLs to same origin  
        return (url == origin ||url.slice(0, origin.length + 1) == origin + '/') ||  
            (url ==sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||  
            // or anyother URL that isn't scheme relative or absolute i.e relative.  
           !(/^(\/\/|http:|https:).*/.test(url));  
    }  
    function safeMethod(method) {  
        return(/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));  
    }  
    if(!safeMethod(settings.type) && sameOrigin(settings.url)) {  
       xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));  
    }  
});  

</script>

7.有关403forbidden的详细讲解参照:

http://blog.csdn.net/wujingwen1111/article/details/7870252


8.运行效果如下






解释:其中123就是动态更新的信息。显示过程中alter的弹框是为了调试。可以根据需要去掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值