JQuery отображает функции PHP - PullRequest
       29

JQuery отображает функции PHP

0 голосов
/ 06 января 2010

Например, я целый день пытался добавить пару новых функций в свой сценарий. Я хочу, чтобы я мог отображать среднюю оценку и голоса, поданные под изображениями с моим рейтингом, как в примере ниже. .

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

3 голосов
/ 06 января 2010

Ваши функции php не извлекают данные, они распечатывают их немедленно.

Вместо «эхо» вы должны использовать «возврат».

Причина, по которой рейтинг удваивается, заключается в том, что обе функции отображают среднюю оценку, только методrateRatingText добавляет еще несколько данных.

Возможно, вам лучше начать с некоторых базовых руководств по PHP, касающихся функций, переменных и обработки возвращаемых значений, прежде чем смешивать php и javascript.

1 голос
/ 06 января 2010

Одна из проблем находится в этой строке в обратном вызове javascript success:

$("#rating-text").text(evaluateRatingText());

Похоже, вы надеетесь, что он вызовет функцию PHP, а это не так. На самом деле он снова вызывает ту же функцию javascript (отправляет другой запрос).

Возможно, вы захотите изменить это на:

$("#rating-text").text(result);
1 голос
/ 06 января 2010

Если вы используете

echo $rating;

чтобы напечатать рейтинг из 10 звезд, затем просто введите строку, которая использует этот рейтинг и количество поданных голосов:

echo $rating . "/10  (" . $votesCast . " votes cast)";

Похоже, ты почти у цели.

0 голосов
/ 06 января 2010

Помимо проблем 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.

0 голосов
/ 06 января 2010

Добавить это ...

<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)";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...