Проблема с вызовом функции php из javascript с использованием ajax - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь создать систему рейтинга, и мне нужно вызвать функцию из файла сохранения. php и передать туда переменные - $ id (post id) и рейтинг в процентах. Я не уверен, как вызывать эти переменные, а затем ссылаться на них при ранжировании. php Это мой код:

$( function() {
    var postID = <?php echo $id; ?>;

    var rating = new starRating( { // create first star rating system on page load
        containerId: '$id', // element id in the dom for this star rating system to use
        starWidth: 60, // width of stars
        starHeight: 60, // height of stars
        ratingPercent: '0%', // percentage star system should start 
        canRate: true, // can the user rate this star system?

        user: '$userLoggedIn',

        onRate: function() { // this function runs when a star is clicked on
            //console.log( rating );
            $.ajax({
                url: '../handlers/starating.php', 
                type: 'POST', 
                data: 'post_id='+postID+'&rating_num='ratingPercent,
                dataType: 'json',
                success: function(){
                    console.log('works');
                }
            }); 
            //alert('You rated ' + rating.newRating + ' starts' );
        }
    } );
} );

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Добро пожаловать в сообщество.

Прежде всего, не стоит включать код php непосредственно в файл js, по многим причинам, среди которых читаемость, безопасность и так далее c. Эти два должны быть строго разделены и иметь ajax для управления тем, что происходит между.

Вот пример:

JS

function Call_AJAX({do_action,ajax_id,do_success}) {
        $.ajax({
            type : 'POST',
            url : ajax_url,
            dataType : 'json',
            data : {
                action : do_action,
                id: ajax_id
            },          
            success : do_success
        });
    };

php

function call_php_function(){           
    $id   = $_POST['id'];       

    //Do something wit the call then return result
    $result = do_something();           
    echo json_encode($result);  
    exit;           
};

затем вы можете назвать это следующим образом: js:

//Get some sort of result
var result_append = function (data) {
    //Do something with the returned data
    console.log(data.result)
};  

Call_AJAX(
    do_action = 'call_php_function',
    ajax_id = some_ajax_id,
    do_success = result_append);    

Таким образом, вы можете позвонить определенному c функция в php (например, call_php_function()), затем получить информацию о рейтинге. Получив результат, отправьте его обратно json_encode. И вы можете отобразить их, как только ajax вызов будет успешным. Вы можете реализовать обработку ошибок в обе стороны. Таким образом, что бы ни происходило в клиентском интерфейсе, это никак не отразится на серверном, наоборот.

Надеюсь, это поможет.

0 голосов
/ 15 января 2020

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

Теперь, поскольку для отображения переменной в php мы используем echo , вы должны заменить свой код на этот.

$( function() {
                            var postID = '<?php echo $id; ?>';

                            var rating = new starRating( { // create first star rating system on page load
                                containerId: '<?php echo $id; ?>', // element id in the dom for this star rating system to use
                                starWidth: 60, // width of stars
                                starHeight: 60, // height of stars
                                ratingPercent: '0%', // percentage star system should start 
                                canRate: true, // can the user rate this star system?

                                user: '<?php echo $userLoggedIn; ?>',

                                onRate: function() { // this function runs when a star is clicked on
                                    //console.log( rating );
                                    $.ajax({
                                        url: '../handlers/starating.php', 
                                        type: 'POST', 
                                        data: 'post_id='+postID+'&rating_num='ratingPercent,
                                        dataType: 'json',
                                        success: function(){
                                            console.log('works');
                                        }
                                    }); 
                                    //alert('You rated ' + rating.newRating + ' starts' );
                                }
                            } );
                        } );

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...