2015-09-28 75 views
4

我在构建的应用程序中遇到问题。我已经阅读了许多有关类似问题的线索,并已应用这些线索中给出的建议。然而,问题依然存在,因此我写这个。缓存的Ajax调用

的设置进行如下:

  1. 我有3 PHP文件:index.phpstep_one.phpcalculation.php
  2. 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 form.Then在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。我这是怎么回jsoncalculation.php

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本地机器上运行。 请你帮忙吗?我在这里做错了什么?

+1

应该:'url:'step_one.php?cach ='+ nocache,'be:'url:'step_one.php?cache ='+ nocache,'? –

+0

@RyanVincent查询字符串的名称并不重要,只要相应的*值**是随机的,那么'cach'和'cache'就会做同样的事情(不缓存请求),所以这不应该成为问题。我认为它与OP加载请求和脚本的方式有关,但是我在这里错过了全部案例(张贴您认为相关的内容会留下很多**相关**代码,其他开发者需要帮助。) – SidOfc

+0

@semu我会首先检查一下,看看这些动作是否真的发生在JS中(例如,正确的* events *被解雇),并且你可以通过将'console.log('got here')'放在你的clickhandler for'$('#viewprice')' - 这样,无论何时在控制台/ devtools打开的情况下单击该按钮,如果事件触发,您都会看到“到达此处”,以便您知道它是否位于该处理程序中的某处或不。您可以为每个处理程序执行此操作,以更快速地找到错误,并可能完全解决您的问题! – SidOfc

回答

1

我发现,是让我头疼的bug。这是一个逻辑错误。

背景

我在表格中出于安全原因使用令牌。因此,对于每个表单,我在页面加载时生成一个令牌并将其存储在会话中。然后,当表单发送数据(包括令牌)时,我首先检查收到的令牌是否在会话中 - 如果找到令牌,我使用接收值并使用它们来计算$data,然后我将它传递给json_encode功能。找到令牌后,我删除它。

因此,calculation.php而不是因为我的Ajax代码是正确的。相反,问题是我重新发送表单数据进行重新计算。在重新发送期间,会话中的令牌已被删除;因此,我在表单数据中发送的令牌在会话中找不到。因此,数据没有计算出来,也没有任何回报。