1

私はAJAXを使用してitems.phpファイルにシリアル化されたデータを送信しています。FireBugで結果を確認しています。AJAXは次のようなデータを送信しますcategory=2。私のitems.phpファイルは次のとおりです。

<?php
require_once('db.php');
if (isset ($_POST['category'])) {
$kat = mysql_real_escape_string($_POST['category']);
if ($kat == 0){
 $kat = '';
}elseif ($kat == 1){
 $kat = 'ORDER BY date DESC';
}elseif ($kat == 2) {
    $kat = 'ORDER BY price DESC';
}elseif ($kat == 3) {
    $kat = 'ORDER BY price';
}
}else{ $kat = '';}
        $query = "SELECT * FROM prekes ".$kat."";
        mysql_query("SET NAMES 'UTF8'");
        $q = mysql_query($query) or die(mysql_error());
        $i = 0;
        while($f = mysql_fetch_array($q)){

        echo '<div kaina="'.$f['kaina'].'" class="prekes"><img src="prekes/'.$f['foto'].'">'.$f['pavadinimas'].'<br /><strong>'.$f['kaina'].'Lt </strong></div>';
        }
        ?>

これが私のAJAX成功関数です:

   $.ajax({
        type: 'POST',
        url: 'items.php',
        data: cleaned,
        success: function () {          
                              $('#items').fadeOut("fast").load("items.php?ts="+ $.now()).fadeIn("fast");
    }
   }); 

Divは成功後に更新されますが、古い、順序付けられていない結果になっています。なぜそれが起こっているのですか?

4

4 に答える 4

4

loadメソッドは内部でjQueryメソッドを使用しているため、キャッシュされたgetデータを取得していると思います。クエリ文字列の一部として一意のキーを送信するようにしてください。これにより、新しいコンテンツ/ result/uncachedデータが提供されます。オブジェクトを使用して、新しい一意の文字列を作成できます。Date

$('#items').fadeOut("fast").load("items.php?ts="+new Date().getTime())

編集:$.now() jQueryには、一意のタイムスタンプを提供するために呼び出される小さなメソッドがあり ます。Date()。getTime()メソッドを作成する代わりに、これを使用できます。

$('#items').fadeOut("fast").load("items.php?ts="+ $.now())

$ .now()メソッドは、式(new Date).getTime()によって返される数値の省略形です。

指摘してくれたKevinに感謝します。:)

編集2:コードを見た後

1)順序付きリストを返すために使用されているクエリ文字列値を渡していない。categoryこのように渡す必要があります。

$('#items').fadeOut("fast").load("items.php?category=2&ts="+ $.now())

2) loadメソッドはGETリクエストです。PHPコード(items.php)で、$ _ POSTを使用してアクセスしています(これは正しいですか?$ _ GETであってはなりませんか?

だから変更

$kat = mysql_real_escape_string($_POST['category']);

$kat = mysql_real_escape_string($_GET['category']);
于 2012-07-19T14:38:47.107 に答える
3

ajax呼び出しがキャッシュされないようにするために、私は通常、グローバル関数を設定しています。

(これは機能に依存しません。つまり、post / get / etc)

    $.ajaxSetup({
         cache: false
    }); 
于 2012-07-19T14:48:52.627 に答える
1

問題は.load('items.php')、GETリクエストを使用することであり、設計上、GETリクエストはブラウザにキャッシュされるため、検索を続ける必要はありません。ページがキャッシュされないように、サーバーに適切なヘッダーを設定します。

<?php
  header("Cache-Control: no-cache, must-revalidate"); 
  header("Pragma: no-cache");
  header("Expires: Sat, 26 Jul 1997 00:00:00 GMT"); 
?>
于 2012-07-19T14:38:40.120 に答える
0

ヘッダーのキャッシュなしを追加

ヘッダー:{'Cache-Control':'no-cache'}

于 2019-12-03T13:55:54.360 に答える