Jquery 即使我使用了csrf_令牌,Ajax也无法工作
我有一个使用django的网络游戏项目 首先,当我使用ajax get方法带来用户字符数据时 它工作得很好Jquery 即使我使用了csrf_令牌,Ajax也无法工作,jquery,ajax,django,Jquery,Ajax,Django,我有一个使用django的网络游戏项目 首先,当我使用ajax get方法带来用户字符数据时 它工作得很好 (function(){ $("document").ready(function(){ $get_id = $('#character'); //현재 로그인 된 유저가 케릭터를 갖고 있는지 확인하는 코드 $user_has_character = $(".data").data("hasCharacter");
(function(){
$("document").ready(function(){
$get_id = $('#character');
//현재 로그인 된 유저가 케릭터를 갖고 있는지 확인하는 코드
$user_has_character = $(".data").data("hasCharacter");
/*****************************
* when user have character
* ***************************/
if($user_has_character=="True"){
get_gamestart_api_url = '/api/gamestart/data/';
//게임 화면 태그
$scene = $('#scene');
$scene.css("background", "url(../static/images/game/loadingBackground.jpg) no-repeat");
/*****************************
*
* json will get user's character data
*
* **************************/
$.ajax({
method:'GET',
url:get_gamestart_api_url,
}).done(function(data){
character = data[0].character[0]
$get_id.append("<li class='stat'> 케릭터 닉네임: "+character.nickname+"</li>",
"<li class='stat'> 케릭터 레벨: "+character.level+"</li>",
"<li class='stat'> 케릭터 직업: "+character.job+"</li>",
"<li class='stat'> 케릭터 공격력: "+character.status.attack_point+"</li>",
"<li class='stat'> 케릭터 수비력: "+character.status.defence_point+"</li>",
"<li class='stat'> 케릭터 체력: "+character.status.health+"</li>",
"<li class='stat'> 케릭터 마나: "+character.status.mana+"</li>",
);
});
}else{
/*********************
* When the user does not have a character
********************/
}
});
})();
尽管我使用了jquery csrf_令牌,但在发送$.ajax帖子时,
它显示错误
Forbidden (CSRF token missing or incorrect.): /
但我无法理解我的代码中有什么问题…假设此
脚本
在HTML中,而不是在外部.js
文件中,您可以重写以下内容:
$get_id.append("<form method='post' action='/'> <input name='nickname' type='text' style='...'><input type='submit' class='btn_character'> </form>");
$get\u id.append(“”);
为此:
$get_id.append("<form method='post' action='/'>{% csrf token %} <input name='nickname' type='text' style='...'><input type='submit' class='btn_character'> </form>");
$get_id.append(“{%csrf-token%}”);
当您将数据发布到Django时,必须将与其他表单数据一起发布。这就是你犯错误的原因
csrf_令牌
由服务器生成,并作为隐藏输入注入表单中
如果此脚本位于其自己的文件中,并且您将其作为:
加载到HTML中,则您有2个选项:
标记!)保存为game\u script.html
。然后在HTML模板中按如下方式注入:
斯塔夫在这里。。。
... 在底部
{%include'game_script.html%}
csrf令牌
,一旦获得该令牌,然后创建表单(在append
中),包括收到的csrf\u令牌
然而,最简单的解决方案不是向Django发出
POST
请求,而是发出GET
请求。简单地说,将method='post'
更改为method='get'
,就可以开始了。没有csrf令牌
需要它。这是因为您需要csrftoken
值,但服务器尚未生成该值。它不包含在您的表单中
!你解决问题了吗?@nik_m噢,很抱歉我解决了我的问题,但我删除了“.js”文件并重新编写,我不明白是什么问题,但我解决了我的问题。如果我的回答帮助你解决了这个问题,请接受。这是StackOverflow的一个很好的实践!
$get_id.append("<form method='post' action='/'>{% csrf token %} <input name='nickname' type='text' style='...'><input type='submit' class='btn_character'> </form>");