2015-09-28 27 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代碼是正確的。相反,問題是我重新發送表單數據進行重新計算。在重新發送期間,會話中的令牌已被刪除;因此,我在表單數據中發送的令牌在會話中找不到。因此,數據沒有計算出來,也沒有任何回報。