Javascript 为什么我的浏览器在使用ajax时会重新加载?

Javascript 为什么我的浏览器在使用ajax时会重新加载?,javascript,ajax,Javascript,Ajax,我创建了一个ajax函数,当用户单击它时,它会将一条消息添加到他的收藏夹选项卡中。我希望它的工作原理类似于一个类似twitter的按钮,这样当用户单击收藏夹按钮时,它不会重新加载页面。我正确地创建了所有内容,甚至ajax函数也会调用php文件并将所有内容插入到数据库中,只是单击后它仍然会重新加载页面 我的ajax代码: <script> function GetXmlHttpObject() { var xmlHttp=null; try

我创建了一个ajax函数,当用户单击它时,它会将一条消息添加到他的收藏夹选项卡中。我希望它的工作原理类似于一个类似twitter的按钮,这样当用户单击收藏夹按钮时,它不会重新加载页面。我正确地创建了所有内容,甚至ajax函数也会调用php文件并将所有内容插入到数据库中,只是单击后它仍然会重新加载页面

我的ajax代码:

 <script>
        function GetXmlHttpObject() { 
      var xmlHttp=null; 
      try 
        { 
        // Firefox, Opera 8.0+, Safari 
        xmlHttp=new XMLHttpRequest(); 
        }
    catch (e) 
        { 
        // Internet Explorer 
        try 
            { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } 
        catch (e) 
            { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); }
        } 
    r  eturn xmlHttp; 
   }
      function ajaxfav(){
       var xmlHttp=GetXmlHttpObject();
       var url="favorite.php?message="+document.msgidform.fav_message.value;
      xmlHttp.onreadystatechange=function(){
        if(xmlHttp.readyState==4){
        alert("Message is favorited");

        }
    }
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);

}
  </script>

函数GetXmlHttpObject(){
var xmlHttp=null;
尝试
{ 
//Firefox、Opera 8.0+、Safari
xmlHttp=新的XMLHttpRequest();
}
捕获(e)
{ 
//Internet Explorer
尝试
{xmlHttp=newActiveXObject(“Msxml2.xmlHttp”);}
捕获(e)
{xmlHttp=newActiveXObject(“Microsoft.xmlHttp”);}
} 
r eturnxmlhttp;
}
函数ajaxfav(){
var xmlHttp=GetXmlHttpObject();
var url=“favorite.php?message=“+document.msgidform.fav_message.value;
xmlHttp.onreadystatechange=函数(){
if(xmlHttp.readyState==4){
警报(“信息是受欢迎的”);
}
}
open(“GET”,url,true);
xmlHttp.send(空);
}
我的php代码:

   $user_id = $_SESSION['active_user_id'];
    extract($_POST);
    extract($_GET);
    if(isset($_GET['message']))
    {
        $id=$_GET['message'];

        $q=$db->prepare("SELECT msgid,date,text

        FROM messages 
        WHERE to_id=? and msgid=?");
        $q->bindValue(1,$user_id);
        $q->bindValue(2,$id);
        $q->execute();
        $row2=$q->fetch();
        $d=$row2['date'];


        $fav_questionq=$db->prepare("SELECT *
        FROM messages
        LEFT JOIN users
        ON messages.to_id=users.id
        WHERE users.id=? AND messages.msgid=?

        ");
        $fav_questionq->bindValue(1,$user_id);
        $fav_questionq->bindValue(2,$id);
        $fav_questionq->execute();
        $frow=$fav_questionq->fetch();

        $fquestion= $frow['text'];


        $result = $db->prepare("SELECT * FROM fav_messages
                            WHERE username=? AND message=?");
        $result-bindValue(1,$user_id);  
        $result-bindValue(2,$id);               
        $result->execute();


    if($result->rowCount()== 1 )
    {
        $deletequery=$db->prepare("DELETE FROM fav_messages WHERE message=?");
        $deletequery->bindValue(1,$id);
        $deletequery->execute();
    echo("<script>location.href = 'index.php?a=recieved';</script>");
    }
    else
    {
    $insertquery = $db->prepare("INSERT INTO fav_messages (username,message,fav_question,fav_date) values(?,?,?,?)");
    $insertquery->bindValue(1,$user_id);
    $insertquery->bindValue(2,$id);
    $insertquery->bindValue(3,$fquestion);
    $insertquery->bindValue(4,$d);
    $insertquery-execute();
    }
    echo("<script>location.href = 'index.php?a=recieved';</script>");
    }
$user\u id=$\u会话['active\u user\u id'];
摘录(元);;
提取($\u-GET);
如果(isset($_GET['message']))
{
$id=$\u获取['message'];
$q=$db->prepare(“选择msgid、日期、文本
来自消息
其中to_id=?和msgid=?”;
$q->bindValue(1,$user\u id);
$q->bindValue(2,$id);
$q->execute();
$row2=$q->fetch();
$d=$row2['date'];
$fav_questionq=$db->prepare(“选择*
来自消息
左加入用户
在消息上。to_id=users.id
其中users.id=?和messages.msgid=?
");
$fav\u questionq->bindValue(1$user\u id);
$fav_questionq->bindValue(2$id);
$fav_questionq->execute();
$frow=$fav_questionq->fetch();
$fquestion=$frow['text'];
$result=$db->prepare(“从fav_消息中选择*
其中用户名=?和消息=?”;
$result bindValue(1,$user\u id);
$result-bindValue(2,$id);
$result->execute();
如果($result->rowCount()==1)
{
$deletequery=$db->prepare(“从fav_消息中删除,其中消息=?”;
$deletequery->bindValue(1,$id);
$deletequery->execute();
echo(“location.href='index.php?a=received';”;
}
其他的
{
$insertquery=$db->prepare(“插入fav_消息(用户名、消息、fav_问题、fav_日期)值(?,,?)”;
$insertquery->bindValue(1$user\u id);
$insertquery->bindValue(2,$id);
$insertquery->bindValue(3,$fquestion);
$insertquery->bindValue(4,$d);
$insertquery-execute();
}
echo(“location.href='index.php?a=received';”;
}
我的html代码:

     <form name="msgidform" method="post">
        <input type="hidden" name="fav_message" id="" <?php echo "value= '$msg_id'"; ?>></p>
    </form>



           <a class="msg-icon" href="" onclick="ajaxfav();"><img
            src="images/linedfav.png" id='img'></img></a>


这是因为您使用的是
标记,即使您没有提供href属性,它也会将您重定向到主页,这就是为什么您具有重新加载效果。解决这个问题的一种方法是使用
标记创建一个伪锚标记,该标记将具有
标记的样式,并将ajax函数附加到
标记上,他不能也使用
preventDefault()
?是的,这可能是另一个解决方案,这是一个很好的答案。现在如何单击它?除此之外,任何内容都不能单击tag@Tarekas这个preventDefault()函数应该放在哪里?要将处理程序附加到onlick for span标记,需要使用addEventListener函数,preventDefault()应该放在ajaxfav()函数的开头