执行错误后重定向位置

时间:2014-01-15 19:43:07

标签: javascript php url-redirection

我一直在考虑这个问题几个小时,看到这个屏幕的近视点,我无法弄清楚导致问题的原因。

我可以在执行后重定向到唯一页面(在变量中定义)的脚本。该脚本工作正常但每次重定向到的位置都是错误的。

例如。用户有4个链接要检查,让我们说他们是他/她的页面上的新评论。当他/她点击链接时,它每次都指向最旧的链接。不是他们点击的那个。

我有两部分代码:

<?
$result_s = mysql_query("SELECT * FROM pins a LEFT JOIN comments b ON a.id = b.pin_id WHERE b.to_id = '$myid' AND b.status = '0' ORDER BY date DESC");  
$rows = array();
while ($row =  mysql_fetch_assoc($result_s)) { 
  $jS = '"'.$row[id].'"'; 
  $boardid = $row['board_id']; // collection id
  $postid = $row['pin_id']; // post id
  $posturl = $row['pin_url']; // post id
  echo "<table width='100%'><tr>";
  echo "<td align='center'><a href='javascript:setActive(".$jS.")'><img src='".$posturl."' height='100'><br>".$boardid."/".$postid."</a></td>";
  echo "</tr></table>";
} 
?>

<script type="text/javascript">  
  function setActive(ObjID)  {  
    if (window.XMLHttpRequest) {  
      xmlhttp=new XMLHttpRequest();  
    }  
    else {  
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  
    }   
    xmlhttp.onreadystatechange=function()   {  
      if (xmlhttp.readyState==4 && xmlhttp.status==200) {  
        //Return Value. Handle as you wish. Display or ignore.  
        var x = xmlhttp.responseText; 
        if (document.getElementById(ObjID).style.color == 'black') document.getElementById(ObjID).style.color='red';
        else document.getElementById(ObjID).style.color='black';
        document.getElementById(ObjID).innerHTML = '<center><font face="Century Gothic">' + x + '</font></center>'; 
      }  
    }  
    var p_str = "a="+ObjID; 
    xmlhttp.open("POST","/application/views/setActive.php",true);  
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");  
    xmlhttp.send(p_str); 
    location.href="/board/pins/<?php echo $boardid; ?>/<?php echo $postid; ?>";
  }  
  </script> 

我尝试在脚本的位置部分使用不同的变量,但没有任何效果。我没有受过这方面的教育,所以也许我错过了一些对那些程序员来说非常明显的东西,这是我在这里问的理由。

你能看出问题所在吗?

1 个答案:

答案 0 :(得分:0)

有一些问题

  1. Ajax中的A代表异步。所以无论你在Ajax调用之前执行.send之后做什么(使用XMLHttpRequest称为Ajax)

  2. 您使用ObjID调用该函数,然后在Ajax调用的RETURN中执行该操作(xmlhttp.onreadystatechange中的任何内容)但由于ObjID不是全局的而未被复制到范围内,因此在此处未知(封闭件)

  3. 试试这个

    function setActive(ObjID)  {  
      var xmlhttp = window.XMLHttpRequest?new XMLHttpRequest():
          new ActiveXObject("Microsoft.XMLHTTP");  
      var ID = ObjID
      xmlhttp.onreadystatechange = function(id) {
        return function() {
          if (this.readyState != 4) return;
          if (this.status == 200) {
            var obj = document.getElementById(id); // id is passed now
            var style = obj.style; // but please use CSS intead
            style.color = style.color == 'black'?'red':'black';
            style.fontFamily = "Century Gothic";
            style.textAlign="center"; 
            obj.innerHTML = xmlhttp.responseText;
            setTimeout(function() { 
              location.href="/board/pins/<?php echo $boardid; ?>/<?php echo $postid; ?>"
              },3000); // assuming this is what you want
          };
        }(ID); // passing the ObjID
      }
      var p_str = "a="+ObjID; 
      xmlhttp.open("POST","/application/views/setActive.php",true);  
      xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");  
      xmlhttp.send(p_str); 
    }