我是php和javascript的新手,但仍尝试使我的网页正常工作。
我试图在页面上添加一个5星级投票系统,该系统将与我的数据库联系并进行相应的更新。
您可能已经注意到,我的代码语法也不是完美的。

<div class="first"  onmouseover="starmove('-32px')" onmouseout="starnormal()" onclick="rate('harrys','1')">


这是“联系” javascript的div

function rate(id,ratings){
var i=id;
var r=ratings;
var xmlhttp;
if (window.XMLHttpRequest)
  { // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
else
   { // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   }
 xmlhttp.onreadystatechange=function()
   {
xmlhttp.open("POST","http://------/rating.php?id="+i+"&rating="+r,true);
xmlhttp.send();
   }


这是javascript

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Namnlös 1</title>
</head>
<body>
<?php
mysql_connect("host", "username", "password") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());
mysql_set_charset('utf8');
$itemid = ($_GET["id"]);
$rating = ($_GET["rating"]);
$query = "INSERT INTO ratings(id,rating) VALUES ('$itemid','$rating')";
mysql_query($query);
?>
</body>
</html>


这是我的rating.php文件(注意:即使在这里未定义,mysql_connect中的值也位于实际页面上。)

如果我只是打开我的PHP文件,将会在mysql中添加一行,因此我知道它的连接正确。

最佳答案

您将值作为GET传递给rating.php,但将其作为POST进行获取

xmlhttp.open("POST","http://------/rating.php?id="+i+"&rating="+r,true);


在这里,即使您将方法指定为POST,?id="+i+"&rating="+r也意味着ID和等级将作为GET传递。

因此,您不能以以下身份访问它们

$itemid = ($_POST["id"]);
$rating = ($_POST["rating"]);


您将需要将其更改为:

$itemid = ($_GET["id"]);
$rating = ($_GET["rating"]);


还将您的查询更改为:

$query = "INSERT INTO ratings(id,rating) VALUES ('".$itemid."','".$rating."')";


编辑:

我已经在这里更新了Javascript代码。尝试这个:

<script>
function rate(id,ratings)
{
    var i=id;
    var r=ratings;
    var xmlhttp;
    if (window.XMLHttpRequest)
    {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    { // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("POST","http://------/rating.php?id="+i+"&rating="+r,true);
    xmlhttp.send();
}
</script>


变化:
 1.之后有两个大括号:

    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   }


第二个大括号有效地关闭了rate()函数,因此之后的代码没有执行预期的操作。因此,我将大括号移到了代码的末尾,以包装函数。


onreadystatechange函数称为AFTER数据已经发送到服务器以便跟踪请求所发生的情况之后。在您的代码中,您正在onreadystatechange内发送请求,该请求将永远不会执行,因为该请求将永远不会发送。


我变了

  xmlhttp.onreadystatechange=function()
       {
         xmlhttp.open("POST","http://------/rating.php?id="+i+"&rating="+r,true);
         xmlhttp.send();
       }


到一个简单的POST调用中:

 xmlhttp.open("POST","http://------/rating.php?id="+i+"&rating="+r,true);
 xmlhttp.send();


我希望这能解释一切:)

关于php - Javascript不联系php页面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12012040/

10-11 05:06
查看更多