Загрузите функцию PHP Ajax jQuery

У меня есть файл, который загружается наверху моего документа, который называют Videos.php. В том файле несколько функций, такой как getYoutubeVideos. На некоторых страницах я должен несколько раз призывать ту функцию (до 50), и она, конечно, создает главную задержку на времени загрузки. Таким образом, я пытался выяснить, как вызвать ту функцию в, только когда это - потребность (когда кто-то нажимает выставочную кнопку видео). У меня есть очень мало опыта с ajax способностями jQuery. Я хотел бы, чтобы вызов ajax был сделан в чем-то вроде этого:

           jQuery('a[rel=VideoPreview1).click(function(){
                jQuery ("a[rel=VideoPreview1]").hide();
                jQuery ("a[rel=HideVideoPreview1]").show();
                jQuery ("#VideoPreview1").show();

                                //AJAX STUFF HERE

                preventDefault();
            });

Хорошо я создал это на основе ответов, но это все еще не работает:

Код jQuery:

        jQuery(document).ready(function(){ 

            jQuery("a[rel=VideoPreview5]").click(function(){
                jQuery("a[rel=VideoPreview5]").hide();
                jQuery("a[rel=HideVideoPreview5]").show();
                jQuery.post("/Classes/Video.php", {action: "getYoutubeVideos",
artist: "Train", track: "Hey, Soul Sister"},
                    function(data){
                        jQuery("#VideoPreview5").html(data);
                    }, 'json');
                jQuery("#VideoPreview5").show();
                preventDefault();
            });
            jQuery("a[rel=HideVideoPreview5]").click(function(){
                jQuery("a[rel=VideoPreview5]").show();
                jQuery("a[rel=HideVideoPreview5]").hide();
                jQuery("#VideoPreview5").hide();
                preventDefault();
            });
        });


И код PHP:

    $Action = isset($_POST['action']);
    $Artist = isset($_POST['artist']);
    $Track = isset($_POST['track']);
    if($Action == 'getYoutubeVideos')
    {
        echo 'where are the videos';
        echo json_encode(getYoutubeVideos($Artist.' '.$Track, 1, 5, 'relevance'));
    }
1
задан brandon14_99 11 May 2010 в 15:10
поделиться

3 ответа

Хорошо, вот что в конечном итоге сработает:
PHP CODE

    $Action = isset($_POST['action']);
    if($Action == 'getYoutubeVideos')
    {
      getYoutubeVideos($_POST['artist'].' '.$_POST['track'], 1, 5, 'relevance');
    }


JQUERY

        jQuery.ajax({
          type: "POST",
              url: "/Classes/Video.php",
          data: "action=getYoutubeVideos&artist=artist&track=track",
          success: function(data){
             jQuery("#VideoPreview1").html(data);
        }
        });

json кодировка раздражала, не уверен, что json является лучшим способом сделать это, я мог бы также использовать функцию jQuery.post, потому что реальная проблема была с PHP. Если кто-то знает о каких-либо проблемах безопасности с методом, который я делаю, пожалуйста, дайте мне знать. Хотя, кажется, все в порядке.

0
ответ дан 3 September 2019 в 00:41
поделиться
$.post('Videos.php', {
    'action': 'getYoutubeVideos'
}, function(data) {
    // do your stuff
}, 'json');

В коде php сделайте что-то вроде этого:

$action = isset($_POST['action'])? $_POST['action'] : '';
if($action == 'getYoutubeVideos')
{
    echo json_encode(getYoutubeVideos());
}

Тогда data в вашей функции JavaScript будет массивом/объектом/значением, возвращаемым getYoutubeVideos().

2
ответ дан 3 September 2019 в 00:41
поделиться

Я бы сделал JS-часть, как описывает ThiefMaster, но с php-частью я бы обработал немного иначе.

Я бы сделал что-то вроде этого:

if(isset($_POST['action'], $_POST['par1'], $_POST['par2'])
{
    $action = $_POST['action'];
    $result = $this->$action($_POST['par1'], $_POST['par2]);
    echo json_encode(result);
}

Но будьте осторожны, если у вас есть некоторые методы в классе, которые не должны вызываться пользователем, через манипулирование данными POST, тогда вам нужен какой-то способ внести в белый список методы, которые JavaScript может вызвать. Вы можете сделать это, добавив к методам префикс, например:

 $this->jsMethod.$action(....);

, или с помощью простого условия if / switch.

0
ответ дан 3 September 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: