0

我使用 Ajax 函数调用自身来不断更新信息。但是我让脚本运行了一段时间,然后服务器阻止了我的 IP,因为它认为我正在淹没它或类似的东西,我不知道。无论如何,我想知道是否有另一种方法可以更正确地做到这一点。这是我的代码:

阿贾克斯功能:

function update_cart()
{
if (window.XMLHttpRequest)
    var http = new XMLHttpRequest();
else
    var http = new ActiveXObject('Microsoft.XMLHTTP');

http.onreadystatechange=function()
                       {
                           if ((http.readyState == 4) && (http.status == 200))
                           {                                   
                                id('cart_quantity').innerHTML = parseInt(http.responseText);
                                setTimeout('update_cart()', 1000);
                           }
                       }

http.open('GET', actual_path+'fetch_cart_quantity.php', true);  
http.setRequestHeader("X-Requested-With", "XMLHttpRequest");
http.send();        
}

PHP 脚本:

<?php
if($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest')
{
    header('Location: ./');
    exit();
}

session_start();

include '../include/config.php';
include '../include/db_handler.php';
include '../include/cart_handler.php';      

$cart = get_cart_quantity($_SESSION['cart_id']);
if ($cart == NULL) $cart = 0;

echo $cart;
?>

在此先感谢您的帮助。对不起,我的英语不是很好。

4

3 回答 3

0

为什么不在用户执行操作时更新购物车。

例如“将商品添加到购物车”?

这样,您只会在实际需要时调用服务器。

于 2012-08-08T17:49:34.200 回答
0

可能,但我认真地认为每秒查询您的服务器是完全没有必要的,也是一种资源浪费(除非您有非常强迫的客户),让您的脚本每分钟左右查询您的服务器会更好,并且可能在如果您有多个客户在同一台​​服务器上使用此应用程序,则可以长期使用。

如果你真的认为有必要拥有这个功能,一个好的方法是使用推送通知,更多信息可以在这里找到:PHP - 推送通知,这里:推送通知到客户端浏览器和这里:从服务器推送通知到用户PHP/JavaScript

于 2012-08-08T17:47:29.190 回答
0

正如我在评论中所说,您在这里有几个选择。

基本上第一个是通过查询来放松。你不需要长时间轮询这样的事情。将查询调低为每 5 分钟一次或仅在有操作时进行。

您还可以构建一个简单的彗星服务器,以便在从服务器“推送”更新时执行推拉类型的操作。有一个预建的称为 APE: http: //www.ape-project.org/

node.js 也可以为您处理这类事情。

此外,您可能应该查看您的服务器设置,听起来有点奇怪,您的服务器正在阻止它自己的 IP 地址/域...

于 2012-08-08T17:52:07.700 回答