0

我有一个显示在特定页面上的结果列表,这些结果使用简单的 AJAX 请求定期更新。输入表单允许我过滤这些结果,但是由于数据每隔几秒钟更新一次,输入表单在刷新所有数据时无法正常工作。当表单输入字段中有值时,AJAX 是否有任何方法不更新?

下面是 HTML 代码:

<div id="my-query-results" class="visible">
  <div>
    <form class="searchboxInput" action="#">
      <input id="kwd-my-query-results" type="text" value="">
    </form>
  </div>
  <div id="my_recent_queries">
    <span class="loading_placeholder">Loading ...</span><br />
    <img src="../img/ajax-loader.gif" />
  </div>
</div> <!-- my query results -->

下面是我使用的 AJAX 请求:

if( $("#kwd-my-query-results").val() != "") {
  function updateMyQueries() {
    $.ajax({
      url: "/myrecentqueries",
      cache: false,
      success: function(html){
        $("#my_recent_queries").html(html);
      }
    });
    setTimeout("updateMyQueries()", 600000);
  }
  updateMyQueries();
} else {
  function updateMyQueries() {
    $.ajax({
      url: "/myrecentqueries",
      cache: false,
      success: function(html){
        $("#my_recent_queries").html(html);
      }
    });
    setTimeout("updateMyQueries()", 4000);
  }
  updateMyQueries();
}

上面的 if else 语句似乎不起作用。一旦输入框中出现值,它将评估 else 语句。我想我也尝试过 length(),但这似乎也不起作用。还有其他方法可以解决这个问题吗?

更新

鉴于以下建议,我尝试了以下方法,并且在某种程度上有效。它最初加载结果,允许我在不重新加载数据的情况下搜索它们,但是即使输入字段中没有文本,它也不会定期重新加载结果......

$(function(){
  setTimeout(updateMyQueries(), 4000);
});

function updateMyQueries(){
  if ($("#kwd-my-query-results").val() == "") {
    // do ajax call
    $.ajax({
      url: "/myrecentqueries",
      cache: false,
      success: function(html){
        $("#my_recent_queries").html(html);
      }
    });
  }
}
4

1 回答 1

1

我将从将 updateMyQueries 函数移出 if 语句开始,然后可能是这样的。

$(function(){
     SetInterval(updateMyQueries(), 4000):
})

function updateMyQueries(){
    if($("#kwd-my-query-results").Val() == ""){
          // do ajax call
    }
}

编辑 - 这将工作

setInterval(function (){    
    if($("#search").val() == ""){
           // Ajax call here
        }
    }, 4000);

​</p>

于 2012-06-11T21:32:59.370 回答