我正在使用令牌系统通过Ajax请求php页面,问题是我不能通过ajax从同一页面执行多个请求,因为我无法刷新初始页面中的令牌 .
更准确地说:
我有php页面,我有多个按钮,回忆到不同的ajax函数,从页面内部加载不同的表单或数据而不刷新页面(当然使用ajax),当我请求页面时,请求必须有效令牌,如果没有,页面将不会被加载,当我第一次请求页面时,初始令牌不再有效,所以我不能请求其他页面,因为请求将因令牌而被拒绝 .
编辑:主要的PHP页面
<?php
require_once 'core/init.php';
$token = Token::generate();
?>
<button class='btn btn-warning btn-xs' id='1' onclick='edit(this.id)'>Edit</button>
<button class='btn btn-primary btn-xs' id='3' onclick='edit(this.id)'>Bookings</button>
<div id="edit">
</div>
function edit(id)
{
$(document).ready(function(){
$("#edit").load("ajax_edit.php", {id: id, token: '<?php echo $token ?>'});
});
}
ajax_edit.php
<?php
require_once 'core/init.php';
if(Input::exists('post'))
{
if(Token::check(Input::get('token')))
{
} else
{
Redirect::to(404);
}
}
?>
<form id="Form">
//various input fields
<input type="hidden" name="id" value="<?php echo Input::get('id') ?>">
<button class='btn btn-default btn-sm' type='submit'>Edit</button>
</form>
<script>
var options = {
target: '#Form',
url: 'ajax_edit.php',
type: 'post',
success: function() {
alert('Thanks for your edit!');
}
};
$(document).ready(function() {
$('#Form').ajaxForm(options);
});
</script>
怎么能解决这个问题?
1 回答
假设您的
Token
类具有refresh
或newToken
等函数,您可以添加一个额外的参数,告诉它为进一步的请求返回一个新标记(并要求当前标记验证另一个标记的请求是否有效) .HTML将是这样的:
然后将ajax的服务器端代码放在它自己的页面中,没有HTML代码(这样你就可以返回JSON的响应) .