0

情報を継続的に更新するために、それ自体を呼び出すAjax関数を使用しています。しかし、しばらくスクリプトを実行させた後、サーバーがIPをフラッディングしていると思ったため、IPをブロックしました。わかりません。とにかく、これをもっと適切に行う別の方法があるのだろうか。これが私のコードです:

Ajax関数:

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

コメントで述べたように、ここにはいくつかのオプションがあります。

基本的に、最初はクエリでリラックスすることです。あなたはそのようなことを長くポーリングする必要はありません。クエリを5分ごとに1回、またはアクションがあるときはいつでもオフにします。

更新がサーバーから「プッシュ」されるたびにプッシュプルタイプのことを実行する単純なcometサーバーを構築することもできます。APEと呼ばれる構築済みのものがあります:http://www.ape-project.org/

また、node.jsはこの種のことを処理できます。

また、おそらくサーバーの設定を調べる必要があります。サーバーが自身のIPアドレス/ドメインをブロックしているのはちょっと奇妙に聞こえます...

于 2012-08-08T17:52:07.700 に答える
0

おそらく、しかし私は、毎秒サーバーにクエリを実行することは完全に不要であり、リソースの浪費でもあると真剣に考えています(非常に強制的な顧客がいない限り)、毎分サーバーにクエリを実行するスクリプトを作成する方が優れており、同じサーバーからこのアプリケーションを使用している顧客が複数いる場合は、長期的に使用できます。

この機能が本当に必要だと思う場合は、プッシュ通知を使用することをお勧めします。詳細については、PHP-プッシュ通知、ここ:クライアントブラウザーへのプッシュ通知、およびここ:サーバーからユーザーへのプッシュ通知を使用してください。 PHP/JavaScript

于 2012-08-08T17:47:29.190 に答える
0

ユーザーがアクションを実行したときにカートを更新してみませんか。

「ショッピングカートに商品を追加する」など?

そうすれば、実際に必要なときにだけサーバーを呼び出すことができます。

于 2012-08-08T17:49:34.200 に答える