У меня есть файл, который загружается наверху моего документа, который называют 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')); }
Хорошо, вот что в конечном итоге сработает:
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. Если кто-то знает о каких-либо проблемах безопасности с методом, который я делаю, пожалуйста, дайте мне знать. Хотя, кажется, все в порядке.
$.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().
Я бы сделал 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.