-4

次のスクリプトは、db フィールドの値が変更されているかどうかをテストするために作成されています。変更されている場合はページをリロードし、変更されていない場合はユーザーに変更がないことを警告します。

アラートは、.post 関数によって何が返されているかを確認するためのものです。

if() 条件が「==」に設定されている場合、ページアラートが表示され、「!=」に設定されている場合、ページは継続的にリロードされます。

jQuery.post は db フィールド データを取得していますが、2 つの値を正しく比較できないようです。

どんな助けでも大歓迎です、ありがとう

var auto_refresh = setInterval(function(){
    $.post("/index.php/listen", function(data) {
          if($('#slide').html() != data)
            {
               window.location.reload()
            }
            else
            {
               alert('its the same'+ data);
            }
          });
    }, 5000);

編集済み

生データを解析しようとするのではなく、次のように $.post() から HTML を渡してはどうでしょうか。

<p>4</p>

次に、jQuery が挿入され、p タグが $.post() からの新しいバージョンに置き換えられます。これは、html が渡されて空白がなく、比較が正しく行われるためです。

4

3 に答える 3

0

新しい値を html と比較するのはあまり安全ではないと思います。一部のブラウザーでは、スペースや不要な文字が追加される場合があります。タイプ hidden の入力に古い値を保存.val()し、変数で or を使用することをお勧めします。それはあなたのシナリオに依存します。

于 2012-07-12T14:06:06.473 に答える
0

2 つの HTML 文字列を比較しています。1 つは DOM からシリアル化されたもので、もう 1 つはサーバーの応答からのものです。

2 つの文字列が同じになるという保証はありませ。考えてみてください: 同じレンダリングされた html に多くの文字列の違いがある場合があります。たとえば<a href="/file"> click </a>、 と<a href="http://example.org/file">click</a>はどちらも同じ HTML ですが、異なる文字列です。

ここでは、次の 2 つの異なるアプローチを取ることができます。

  1. 「同じ」と見なす 2 つの HTML フラグメントが同じ文字列形式になることを保証する、ある種の正規化ルーチンを作成できます。このルーチンで両方の html フラグメントを実行し、比較します。
  2. バージョンをより明示的に管理できます。
    1. ある種のバージョン インジケーターを含めます。
      1. ヘッダーを使用できますETAG(つまり、http キャッシング メカニズムを利用できます)。
      2. ある種のバージョン番号を html 自体 (おそらくdata-version属性) に含めて、それらを比較することができます。
    2. サーバーから html 文字列を個別に保持し、それと比較することができます。
于 2012-07-12T14:13:50.593 に答える
0

$('#slide').html() == データの場合

それは条件が失敗したことを意味し、等しくないため、アラートが表示されました。

問題は、data 変数がいくつかの余分な空白とともに返される可能性があることです。私があなただったら、データ変数の小さなセクションとスライダーの html の小さなセクションを解析して、それらの値を比較しようとします。

スライダーが ap タグまたは入力値内に何かを持っている場合と同様に、それをデータと比較して、その p タグまたは入力値で返された同じ値があるかどうかを確認し、安全のためにすべての空白を空の文字列に置き換えます。

ところで、余分な空白があるかどうかを実際に知ることはできないため、アラートを使用しないようにしてください。Visual Studio で IE を使用している場合は "debugger" などを使用し、chrome または firefox を使用している場合は console.log を使用してみてください。

于 2012-07-12T14:11:06.003 に答える