2017-05-02 13 views
0

私のコード内でレビューしたいと思います、毎秒実行されるJavaScript/ajaxコードを作成しています。ここに私のコードが何をしているのですか 変更があった場合はキューに変更があるかどうかをチェックし、変更がなければ警告し、常にチェックするように実行します。警告を発し、時には警告を発しません。ここに私のコードは次のとおりです。変更を比較すると、変更がある場合は更新されます

function check_getqueue(clinicID, userID) { 
var tmpCountQ = []; 
    $.ajax({ 
    url: siteurl+"sec_myclinic/checkingUpdates/"+clinicID+"/"+userID, 
    type: "POST", 
    dataType: "JSON", 
    success: function(data) { 
     for(var i=0;i<data.length;i++) { 
     tmpCountQ.push(data[i]['queue_id']); 
     }; 
     if(typeof lastCon[0] != "undefined") 
     { 
     for(j=0;j < tmpCountQ.length;j++) 
     { 
      if(tmpCountQ[j] != lastCon[j]) 
      { 
      $("#boxqueue").empty(); 
      alert("there is change"); 
      // refresh_afterdel(clinicID, userID); 
      lastCon[j] = tmpCountQ[j]; 
      } 
     } 
     } 
     else 
     { 
     lastCon = tmpCountQ; 
     } 
     // console.log("lastCon "+lastCon) 
     // console.log("tmpCountQ "+tmpCountQ); 
    } 
    }); 
} 

答えて

-1

あなたは、サーバーへの同期呼び出しを保証していませんし、ローカルVARSは、したがって、どのようなキューの要求であるFIFOであることが保証されていないとして、すべての変数は、成功またはエラー関数内で宣言されていません。解決策は、パッケージのシーケンス番号を持つバッファを使用してデータをFIFOキューに整理することです。これは、整数のIDを持つJSONオブジェクトのJSON配列に返される内容を変更することを意味します。データをチェックするときは、アラートする前に正しいパケットを確認してください。次のパケットアラートが発生し、サーバーのキューが空になるまで繰り返します。

+0

あなたは私のコード全体が間違っているのですか? –

+0

あなたは私に1をマークすることができますが、私はあなたが並行性を理解していないと言っていますので、私を-1にしてください。それは真実です。 ajax呼び出しに対話する複数のスレッドを持つ非同期システムで並行性を確保するには、手ぶれが必要です。 –

0

変数jは初期化されません。したがって、同じグローバルを更新する可能性がありますj

function check_getqueue(clinicID, userID) { 
var tmpCountQ = []; 
    $.ajax({ 
    url: siteurl+"sec_myclinic/checkingUpdates/"+clinicID+"/"+userID, 
    type: "POST", 
    dataType: "JSON", 
    success: function(data) { 
     for(var i=0;i<data.length;i++) { 
     tmpCountQ.push(data[i]['queue_id']); 
     }; 
     if(typeof lastCon[0] != "undefined") 
     { 
     for(var j=0;j < tmpCountQ.length;j++) 
     { 
      if(tmpCountQ[j] != lastCon[j]) 
      { 
      $("#boxqueue").empty(); 
      alert("there is change"); 
      // refresh_afterdel(clinicID, userID); 
      lastCon[j] = tmpCountQ[j]; 
      } 
     } 
     } 
     else 
     { 
     lastCon = tmpCountQ; 
     } 
     // console.log("lastCon "+lastCon) 
     // console.log("tmpCountQ "+tmpCountQ); 
    } 
    }); 
} 
+0

ありがとうございました。私はそれを試してみます –

+0

あなたはこれを試しましたか? – Ninjaneer

+0

こんにちは、私の問題を把握して、状況はこれです まず、lastConとtmpCountQには値がありません。次に例1の値を追加すると、それらはすべて1の値を持ちます。 tmpCountQ [j]!= lastCon [j])は満足できません。これをどのように編集できますか? –

関連する問題