在用thinkphp5做项目的时候,ajax提交为了安全携带token,但是遇到一个问题,以编辑按钮为例,一个页面只有第一次点击的时候是成功的,第二次点击时就会提示令牌错误.
前端代码:
<tr>
<td></td>
<td>1</td>
<td>yxg</td>
<td>$1</td>
<td>
<div class="btn-group" role="group" aria-label="...">
<button type="button" class="btn btn-info editTag" onclick=editOne('{:url("index/index/delmulti")}','1');>编辑</button>
</div>
</td>
</tr>
<tr>
<td></td>
<td>2</td>
<td>abc</td>
<td>$2</td>
<td>
<div class="btn-group" role="group" aria-label="...">
<button type="button" class="btn btn-info editTag" onclick=editOne('{:url("index/index/delmulti")}','2');>编辑</button>
</div>
</td>
</tr>
/*------------------jquery的代码------------*/
/*ajax 提交封装函数 集成torken */
function editOne(url,id){
var token='{$Request.token}';
$.ajax({
url:url,
type:"POST",
dataType:"text",
data:{'id':1,'__token__':token},
})
.done(function(data) {
console.log(data);
})
.fail(function() {
alert(data.msg);
})
.always(function() {
console.log("complete");
});
}
控制器中的处理代码:
public function delmulti(){
session_id()||session_start();
$request = \think\Request::instance();
$data=$_POST;
echo $_SESSION['think']['__token__'];
$validate=new Validate([
'id'=>'require|token',
]);
if(!$validate->check($data)){
$res['msg']=$validate->getError();
$res['session']=$_SESSION['think'];
$res['token']=$_POST['__token__'];
$res['newtoken']= $request->token();
$jres=json_encode($res,JSON_UNESCAPED_UNICODE);
echo($jres);
}else{
$res['msg']='success';
$res['session']=$_SESSION['think'];
$res['token']=$_POST['__token__'];
$res['newtoken']= $request->token();
$jres=json_encode($res,JSON_UNESCAPED_UNICODE);
echo($jres);
}
}
根据网上的帮助,发现问题的原因在于ajax的token没有更新,使用完后需要在页面中动态更新token的值.我现在在控制器中返回了新的token值,怎么才能让ajax提交时使用新的token值了?
thinkphp5 生成token方法,ajax请求该地址,不刷新获取新的token
/**