2015-04-26 37 views
0

只有當我點擊F5時,我的腳本纔會在瀏覽器中運行。以前的結果似乎被緩存或什麼的。僅當我點擊F5時,腳本才能在瀏覽器中運行

這是它的樣子:

http://mywebsite.com/unsubscribe.php 

這會導致一個嚴重的問題。我在我的電子郵件中有一個取消訂閱鏈接,我希望發送給用戶,但是當我點擊它時,沒有任何反應,因爲當我在瀏覽器中輸入時,點擊被認爲是相同的。所以即使我在鏈接中有參數

http://mywebsite.com/[email protected] 

該值未被捕獲。

$email = $_GET['email']; 
$newsletter = 'No'; 


    try { 
     $stmt = $conn->prepare("UPDATE USERS SET NEWSLETTER = ? WHERE EMAIL = ?"); 
     $stmt->execute(array($newsletter, $email)); 
     $response["success"] = 1; 
     } catch(PDOException $e) { 
     echo 'ERROR: ' . $e->getMessage(); 
     $response["success"] = 0; 
    } 
    echo 'email: '.$email.'<br>'; 
    print(json_encode($response)); 

結果:

email: [email protected] 
{"success":1} 

但是,這是因爲[email protected]緩存(或別的東西),但值未在數據庫中更新。 現在,當我點擊F5時,數據庫中的值被更新。怎麼了?

+0

你永遠不會初始化'$ response'作爲數組。您可以使用GET變量而不檢查它們是否已設置。最後,在JSON之前打印它使得它無用。 –

+0

我不這麼認爲。這是一個示例代碼,我知道在打印json之前我無法迴應任何內容,但我目前正在瀏覽器中進行測試。儘管我在所有內容之前添加了一個簡單的echo'X',但是除非我按F5,否則它不會被打印出來。 – erdomester

回答

0

如果問題是緩存,則應添加一些標題以刪除緩存。然後,你應該發送一個完整的有效的JSON! (你用一些文字添加了無效部分)。

標題:

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json');//*/ 

Simple JSON for PHP - 如果您使用此方法,它會自動發送包頭中

include('includes/json.php'); 

$Json = new json(); 

$email = $_GET['email']; 
$newsletter = 'No'; 
try { 
    $stmt = $conn->prepare("UPDATE USERS SET NEWSLETTER = ? WHERE EMAIL = ?"); 
    $stmt->execute(array($newsletter, $email)); 
    $response["success"] = 1; 
    } catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
    $response["success"] = 0; 
} 

$Json->add('status', '200'); 
$Json->add('message', '$success'); 
$Json->add('email', '$email'); 
$Json->add('response', '$response'); 

$Json->send(); 
+0

我只使用緩存控制和過期頭文件,現在它可以在Firefox中使用。我仍在研究爲什麼Chrome會以不同的方式處理。謝謝 – erdomester

+0

也許清理鉻的緩存將完成這項工作。也許鉻商店「該webstite接受緩存」?我真的不知道。 :/ –

相關問題