【发布时间】:2016-03-30 20:27:29
【问题描述】:
我正在尝试通过 ajax post 方法通过敲除 js 单击绑定单击按钮来提交用户表单。我收到的错误是 403 - 禁止。
我确定它与 CSRF 有关,但无法弄清楚。
查看.php:
<?php echo form_open('client/search_client_database', ['role' => 'form']); ?>
<fieldset>
<div class="form-group">
<label class="sr-only" for="search_client_input">Search for existing clients</label>
<div class="input-group">
<input class="form-control input-sm" type="text" id="search_client_input" name="search_client_input" placeholder="Search for existing clients...">
<span class="input-group-btn">
<button class="btn btn-primary btn-sm" type="button" data-bind="click: search_client">Search</button>
</span>
</div>
</div>
</fieldset>
<?php echo form_close(); ?>
点击按钮时,会触发淘汰 Js 点击绑定以启动对控制器的 ajax 调用。 Knockout js 代码位于一个单独的 js 文件中,该文件与视图一起加载。
Client.js 文件:
var base_url = window.location.origin;
var url = base_url+"/client/";
this.search_client = function()
{
crsf = $("input[name=csrf_test_name]").val();
dataString = $("#search_client_input").val();
alert(crsf);
$.ajax({
url: url+"search_client_database",
type: "post",
cache: false,
data: {crsf: crsf, data: dataString},
success: function(customer_details) {
alert(customer_details);
},
error: function(xhr, ajaxOptions, thrownError)
{
alert(xhr.status);
alert(thrownError);
}
});
}
控制器:
public function search_client_database()
{
$data = $this->input->post('data');
echo $data;
}
我不断收到 xhr 错误 403,即禁止。网址没有错。
【问题讨论】:
-
您必须发回与
$config['csrf_token_name']中配置的名称相同的 csrf 令牌。所以试试data: {"csrf_test_name": crsf, data: dataString},
标签: jquery ajax codeigniter knockout.js