一开始,我只是出于简单的原因关闭了CSRF,以便让我的表单/ ajax工作。现在,当我打开它并尝试使用CSRF的输入和内容时,什么都不会起作用。我的表单没有提交,或者当它提交时,我的整个页面都会刷新,这是我不能允许的。这是我当前的代码。
form method="post">
<input type="text" name="vip_text_box" id="vip" value="<?php echo $total_amount ?>"> <br><br>
<input type="submit" id="submit" value="Redeem" onclick="return rebate_amount()">
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">
</form>和AJAX:
function rebate_amount(){
var value = document.getElementById('vip').value;
var datastring = 'vip='+value;
var url = base_url + '/index.php/home/redeeming_form_value';
$.ajax({
type : 'post',
url : url,
data: datastring,
cache: false,
success: function(html){
$('#vip_point_redeeming').html(html);
}
});
return false;
}请记住这一点。当配置文件中的CSRF关闭时,这一切都有效。但是我认为CSRF和form / ajax有一个问题。
发布于 2017-01-14 02:39:35
您还应将csrf_token包含在数据中
500内部服务器错误
您的AJAX请求构造了一个POST操作,但未能提供CSRF令牌。当CodeIgniter收到POST操作时,它将无法找到令牌,并在您有机会运行任何代码之前关闭所有内容,因此您将收到500内部服务器错误
你可以让成为
data : $("#your_form").serialize();或
data: {
'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',
/*....your data....*/
vip:document.getElementById('vip').value
},你的函数看起来有点
function rebate_amount(){
var url = base_url + '/index.php/home/redeeming_form_value';
$.ajax({
type : 'post',
url : url,
data: {
'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',
/*....your data....*/
vip:document.getElementById('vip').value
},
cache: false,
success: function(html){
$('#vip_point_redeeming').html(html);
}
});
return false;
}https://stackoverflow.com/questions/41637261
复制相似问题