【问题标题】:setTimeout and click设置超时并单击
【发布时间】:2010-08-03 09:04:54
【问题描述】:
$(document).ready(function() {
    $(".rshownews").click(function() {
        window.setInterval(function() {ajaxselectrss($(this).attr("title"))}, 1000);
    });
});

 function ajaxselectrss(rssurlvar) {
  var ajaxRequest;  // The variable that makes Ajax possible!

 try{
  // Opera 8.0+, Firefox, Safari
  ajaxRequest = new XMLHttpRequest();
 } catch (e){
  // Internet Explorer Browsers
  try{
   ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
   try{
    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
   } catch (e){
    // Something went wrong
    alert("Your browser broke!");
    return false;
   }
  }
 }
 // Create a function that will receive data sent from the server
 ajaxRequest.onreadystatechange = function(){
  if(ajaxRequest.readyState == 4){

   var ajaxDisplay = document.getElementById('news');
   ajaxDisplay.innerHTML = ajaxRequest.responseText;
  }
 }



 //var rssurlvar = $(this).attr("title");
 var queryString = "rurl=" + rssurlvar;
 var urltofile = "rssget.php";
 ajaxRequest.open("POST", urltofile, true);
 ajaxRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 ajaxRequest.setRequestHeader("Content-length", queryString.length);
 ajaxRequest.setRequestHeader("Connection", "close");
 ajaxRequest.send(queryString); 

}

但是 POST 查询是未定义的。为什么?

【问题讨论】:

  • 你想做什么?你的代码也不正确。
  • 我正在尝试这样做,因为我想每秒向文件发送一个 AJAX 请求以定义数据库中是否有新内容。
  • 试试setInterval(function() {someFunc($(this).attr("title"));}, 1000);
  • @sje397 - 这个工作!但 POST 查询未定义
  • @Iam3r4370 - 尝试使用$.ajax,这应该是一个单独的问题 - 否则它会使所有其他尝试回答无关。

标签: javascript jquery ajax settimeout


【解决方案1】:

您的代码至少应如下所示:

$(document).ready(function() {
 $(".rshownews").click(ajaxselectrss);
});

function ajaxselectrss() {
  //ajax function
}

setTimeout(ajaxselectrss, 1000);

对于重复的任务,请改用setInterval

【讨论】:

  • @lam:从'someFunc($(this).attr("title"))' 中删除引号,试试someFunc($(this).attr("title"))
  • 无用的 setInterval 调用(参数周围缺少引号?)
  • 不要删除 "title" 中的双引号,只删除包裹函数的单引号。
  • 除非 someFunc 返回一个函数,否则删除引号将无济于事。您需要将一个函数传递给 setInterval,而不是一个函数的结果。
【解决方案2】:

setInterval 可以采用字符串或函数指针。传递包含 '$(this)' 的字符串将不起作用(因为传递字符串具有在调用时对字符串进行评估的效果)。

那就试试吧:

var title = $(this).attr('title');
setInterval(function() {someFunc(title);}, 1000);

【讨论】:

    【解决方案3】:

    也许你应该使用setInterval 而不是 setTimeout

    【讨论】:

      【解决方案4】:

      你不能在 setInterval 中使用$(this),也许这样的东西会起作用

      var rshownews;
      function someFunc(rssurlvar) {
        $('body').append('<br>'+rssurlvar);
      }
      $(document).ready(function() {
          $(".rshownews").click(function() {
              rshownews = $(this).attr("title");
              window.setInterval('someFunc(rshownews)',1000);
          });
      });​
      

      使用 setInterval 进行编辑,您需要 var 和函数在全局范围内,demo

      【讨论】:

      • 代码已更新,您需要全局范围内的函数 someFunc 和 var rshownews
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多