2016-12-21 9 views
2

私はシャッフルして配列し、いくつかのパラメータに基づいてランダムな順序でそれを返すPHPスクリプトを持っています。 URLに直接スクリプト/パラメータを入力すると、PHPスクリプトの出力はランダムであるはずです。返される配列はシャッフルされます(これを行うにはshuffle($ array)を使用します)。AJAXリクエストされたPHPスクリプトがキャッシュされていますか?

私がAJAX経由で呼び出すときはいつでも、私は同じ結果を得ます。常に同じ順序を返します。 $ .getを$ .ajaxに変更してキャッシュをfalseに設定しようとしましたが、機能しませんでした。$ .get()の値が$ .nowキャッシュ。

スクリプトを呼び出すと、同じ順序が返されますが、URLに直接移動すると問題がなくなり、毎回ランダムになります。私が言ったように、私もキャッシュの無効化の方法を試みたが、何も作業していない、

$.get("scripts/findAnime.php", { q: JSON.stringify(params) }, function(data, status) { 
    console.log(data); 
}); 

つぶし任意のキャッシュなしですが、:

要求は今、この権利のようになります。

PHPシャッフルは次のようになります。 $ generatedAnimeListに入る複数の配列がありますが、それらはすべてこのようなプロセスを経ます。

私がajax呼び出しを行い、最低$を返すと、ランダムにシャッフルされる代わりに毎回同じ結果が返されます。

if(!empty($least)) { 
    shuffle($least); 
    for($i = 0; $i < sizeof($least); $i++) { 
     array_push($generatedAnimeList, $least[$i]['id']); 
    } 
    unset($least); 
} 

私は喪失しており、非常に刺激されており、何をすべきかわかりません。私は前にこれと同様のコードを持っていたし、それは完全に働いた。今は何もない。

UPDATE:だから私は、文字通り、スクリプトに入れ

$temp = array(1,2,3,4,5); 
shuffle($temp); 
echo json_encode($temp); 

とリクエストが同じ「ランダム」オーダーごとに時刻を返します。だから、リクエストのあるものは、あまり意味がありません。

更新日:私のブラウザのキャッシュをクリアしました。何もしませんでした。それでも同じ答えが返ってくる。私はパラメータ(q)に基づいて発見した、私は別の答えを得るでしょう。上記の例に基づいて、配列をシャッフルしています。私が "ALL"の値を持つqを送ると、常に同じ番号を返し、 "ACTION"の値でqを送ると、常に同じ番号を返しますが、qが "ALL" 。私は今、壁に向かって私の頭を打つつもりです。

更新いいえ。私は文字通りこのことを次のように取り除いた。 GET要求を行うJSファイル:

$.get("scripts/findAnime.php"+$.now(), function(data, status){ 
    console.log(data); 
} 

とPHPスクリプト(findAnime.php)はこれです:常に同じ "シャッフル" の結果を得るもの、どんなに

$temp = array(1,2,3,4,5); 
shuffle($temp); 
echo json_encode($temp); 

。私の場合、[5,4,1,2,3]。すべて。くそー。時間。

UPDATE: JSがPHPスクリプトをリクエストしていることを確認でき、毎回200を返しています。それで、新しいコピーを要求しています...少なくとも、おそらく...

コメント/回答ありがとうございます。

+0

separeteブラウザのタブ(通常のgetリクエスト)でphpスクリプトにURLを開いた場合、どのように動作しますか? – rNix

+0

正常に動作します。私がPHPスクリプトに直接ナビゲートすると、ランダムになります。私は一日中リフレッシュすることができ、常にランダムな結果を得ます。 –

+0

'JSON.stringify 'で問題になるかもしれません。 '$ .now()'の値を 'params'に追加しようとしましたか? – rNix

答えて

0

をワニス!!!!!

だから私は今や馬鹿のように感じる。それは実際にはそれから遠いキャッシングの問題ではありませんでした。私のページでは、私はその日に基づいて変化するページの一部を持っているので、シードを持つphp srand関数を設定しました...

明らかに、srand()関数はshuffle()関数のランダム性。

したがって、srand(mktime(0,0,0))を使用した後、私は再びsrand()とTADAを呼び出すことによってリセットします!乱数!

私を助けてくれてくれてありがとう。今は毛が少なくなっている。申し訳ありませんが、その答えは質問自体に無関係であることが判明しました。

0

PHPスクリプトに次のヘッダーを追加します。

header("Cache-Control: private, max-age=1"); 
header("Expires: ".gmdate('r', time()+1)); 

また、mod_PageSpeedのような他のキャッシュ方法については、サーバーをチェックして解決しよう

+0

私はPHPスクリプト上にこれらのヘッダーがありましたので、それは問題ではありません。残念ながら。 –

関連する問題