我在构建的应用程序中遇到问题.我已经阅读了许多关于类似问题的线索,并应用了这些线程中给出的建议.但问题仍然存在,因此我写了这个.
设置如下:
>我有3个PHP文件:index.PHP,step_one.PHP和calculation.PHP.
>从index.PHP,我通过Ajax调用成功加载了step_one.PHP,如下所示:
$(document).ready(function () {
var nocache = Math.random() * new Date().getTime() + Math.random();
$("#bookings").click(function () {
$.ajax({
url: 'step_one.PHP?cach='+nocache,
type: 'post',
cache: false,
success: function (data) {
$("#contentLeft").html(data);
}
});
});
});
注意:step_one.PHP是html表单.然后在step_one.PHP中,我在表单中输入数据并通过另一个Ajax调用将表单数据发送到calculation.PHP,如下所示:
$("#viewprice").click(function () {
var nocache = Math.random() * new Date().getTime() + Math.random();
$.ajax({
url: 'calculate_quote.PHP?cache=' + nocache,
type: 'post',
dataType: 'json',
cache: false,
data: $("#stepOneForm").serialize(),
success: function (data) {
console.log(data);
$(".quote").append(data);
$(".quote").show();
document.getElementById("price").value = data;
}
});
});
calculate.PHP文件,根据收到的数据计算价格,并将json返回到step_one.PHP.这是我从calculate.PHP返回json的方法:
header('Content-Type: application/json');
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Expires: 0'); // Proxies.
echo json_encode($data);
注意:我第一次点击#viewprice按钮,价格正确并成功返回到step_one.PHP.但是,在step_one.PHP中输入新数据并重新单击#viewprice按钮时,compute.PHP不会返回任何内容.当我检查网络数据时,我看到compute.PHP在那里被复制,只有第一个Ajax调用将响应中的数据.
而这在xamp的本地机器上运行.
你能帮忙吗?我在这做错了什么?
解决方法:
背景
出于安全原因,我在表单中使用令牌.因此,对于每个表单,我在页面加载时生成一个令牌并将其存储在会话中.然后当表单发送其数据(包括令牌)时,我首先检查收到的令牌是否在会话中 – 如果找到令牌,我然后使用接收值并使用它们来计算$data然后我将它传递给json_encode函数.找到令牌后,我将其删除.
因此,我没有缓存compute.PHP,因为我的Ajax代码是正确的.相反,问题是当我重新发送表单数据以进行重新计算时.在重新发送期间,会话中的令牌已被删除;因此,在会话中找不到我用表单数据发送的令牌.因此,数据没有计算,也没有返回.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。