2015-04-26 107 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接受缓存”?我真的不知道。 :/ –

相关问题