我一直试图在我的脚本中整天添加一些新功能,例如,我希望能够显示平均费率和在我的星级评分图片下投票的投票,就像下面示例中的某些内容
**********
9.8/10 (1160 vote cast)
我一直在尝试所有事情,并在遇到问题之后遇到问题。例如,现在每个新的PHP函数都会相互干扰。
例如,我的第一个PHP函数getRating()
本身可以正常工作,但是当它与我的第二个PHP函数evaluateRatingText()
一起使用时,它将无法正确显示,而我的第一个PHP函数会使我的第二个PHP函数混乱显示所有错误的平均评级,例如它实际显示两次值。
那么如何使我的两个PHP函数与我的JQuery函数一起正常工作,该函数正确显示我的第一个php函数getRating()
,以便我的JQuery函数可以相应地显示两个PHP函数?任何人都可以帮我解决一些例子吗?
这是我的PHP函数。
// function to retrieve
function getRating(){
$sql= "select * from vote";
$result=@mysql_query($sql);
$rs=@mysql_fetch_array($result);
// set width of star
$rating = (@round($rs['value'] / $rs['counter'],1)) * 10;
echo $rating;
}
// function to retrieve average rating and votes
function evaluateRatingText(){
$sql= "select * from vote";
$result=@mysql_query($sql);
$rs=@mysql_fetch_array($result);
$avg = (@round($rs['value'] / $rs['counter'],1)) * 10;
$votes = $rs['counter'];
echo $avg . "/10 (" . $votes . " votes cast)";
}
这是JQuery函数。
// get current rating
getRating();
// get rating function
function getRating(){
$.ajax({
type: "GET",
url: "update.php",
data: "do=getrate",
cache: false,
async: false,
success: function(result) {
// apply star rating to element
$("#current-rating").css({ width: "" + result + "%" });
},
error: function(result) {
alert("some error occured, please try again later");
}
});
}
HTML标记。
<ul class='star-rating'>
<li class="current-rating" id="current-rating"></li>
<li class="rating-text" id="rating-text"></li>
<span id="ratelinks">
<li><a href="javascript:void(0)" title="1 star out of 10" class="one-star">1</a></li>
<li><a href="javascript:void(0)" title="2 stars out of 10" class="two-stars">2</a></li>
<li><a href="javascript:void(0)" title="3 stars out of 10" class="three-stars">3</a></li>
<li><a href="javascript:void(0)" title="4 stars out of 10" class="four-stars">4</a></li>
<li><a href="javascript:void(0)" title="5 stars out of 10" class="five-stars">5</a></li>
<li><a href="javascript:void(0)" title="6 stars out of 10" class="six-star">6</a></li>
<li><a href="javascript:void(0)" title="7 stars out of 10" class="seven-stars">7</a></li>
<li><a href="javascript:void(0)" title="8 stars out of 10" class="eight-stars">8</a></li>
<li><a href="javascript:void(0)" title="9 stars out of 10" class="nine-stars">9</a></li>
<li><a href="javascript:void(0)" title="10 stars out of 10" class="ten-stars">10</a></li>
</span>
</ul>
答案 0 :(得分:3)
你的php函数不会检索数据,而是立即打印出来。
而不是'echo',你应该使用'return'。
它显示评级加倍的原因是两个函数都回显平均评级,只有evaluateRatingText会附加更多数据。
在混合使用php和javascript之前,可能会先从一些关于函数,变量和处理返回值的基本php教程开始。
答案 1 :(得分:1)
如果您正在使用
echo $rating;
打印出10颗星的评分,然后回显一个使用此评级的字符串和投票数:
echo $rating . "/10 (" . $votesCast . " votes cast)";
看起来你快到了。
答案 2 :(得分:1)
其中一个问题出在这一行,javascript success
回调:
$("#rating-text").text(evaluateRatingText());
看起来你希望它会调用PHP函数,它不会。它实际上再次调用相同的javascript函数(发送另一个请求)。
您可能希望将其更改为:
$("#rating-text").text(result);
答案 3 :(得分:0)
添加此...
<ul class='star-rating'>
<li class="current-rating" id="current-rating"></li>
<li class="rating-text" id="rating-text"></li>
<span id="ratelinks">
[...]
</span>
</ul>
这就是......
function getRating(){
$.ajax({
[...]
success: function(result) {
// apply star rating to element
$("#current-rating").css({ width: "" + result + "%" });
// add rating text
$("#rating-text").text(evaluateRatingText());
},
[...]
});
}
function evaluateRatingText() {
// Replace the line below with a new call to $.ajax() that gets the information you need from a server-side resource; sorry, I don't know PHP
return "9.8/10 (1160 vote cast)";
}
答案 4 :(得分:0)
除了HTML问题(跨越包裹li和文本和列表的奇怪混合)之外,您应该创建一个返回函数和一个计算函数来处理像这样的整个事情
PHP
function echoRatingAll ()
{
list($value, $counter) = getRating2(); //function returns doesn't print
echo "$value,$counter"; //we need to echo for the AJAX & we comma delimit
}
function getRating2(){
$sql= "select `value`, `counter` from vote";
$result=@mysql_query($sql);
list($v,$c) = mysql_fetch_row($result);
return array($v, $c);
}
JS
success: function(result) {
var values=result.split(",", result);
var value = values[0];
var counter = values[1];
//do your jquery stuff from here with the two values
}
如果你不确定如何在Javascript中进行平均,只需让PHP返回3个值而不是2个。