JQuery显示PHP函数

时间:2010-01-06 07:15:20

标签: php jquery

我一直试图在我的脚本中整天添加一些新功能,例如,我希望能够显示平均费率和在我的星级评分图片下投票的投票,就像下面示例中的某些内容

**********
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>

5 个答案:

答案 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个。