我正在构建的应用程序中有一个问题。我读了很多关于类似问题的帖子,并应用了这些帖子中给出的建议。然而,这个问题仍然存在,因此我写了这篇文章。
设置如下:
- 我有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;
}
});
});
calculation.php
文件根据它接收到的数据计算价格,并将json
返回给step_one.php
。这就是我如何从calculation.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
按钮时,calculation.php
没有返回任何内容。当我检查网络数据时,我看到calculation.php
在那里被复制,只有第一个Ajax调用将数据放在其响应中。
在xamp的本地机器上运行。请你帮忙好吗?我哪里做错了?
我找到了让我头疼的bug。逻辑错误
出于安全原因,我在表单中使用令牌。因此,对于每个表单,我在页面加载时生成一个令牌并将其存储在会话中。然后,当表单发送其数据(包括令牌)时,我首先检查接收到的令牌是否在会话中—如果找到令牌,则使用接收到的值并使用它们计算$data
,然后将其传递给json_encode
函数。找到令牌后,我将删除。
calculation.php
是不是缓存我的Ajax代码是正确的。相反,问题是当我重新发送表单数据进行重新计算时。重发时,会话中的令牌已被删除;因此,我与表单数据一起发送的令牌无法在会话中找到。因此,不计算数据,不返回任何内容。
缓存Ajax POST请求
认为上面的链接会有用>>