2010-05-10 8 views
1

J'ai un fichier qui est chargé en haut de mon document, qui est appelé Videos.php. À l'intérieur de ce fichier sont plusieurs fonctions, telles que getYoutubeVideos. Sur certaines pages, j'ai besoin de faire appel à cette fonction plusieurs fois (jusqu'à 50), et cela crée évidemment un retard important sur les temps de chargement. J'ai donc essayé de comprendre comment appeler cette fonction, seulement quand c'est nécessaire (quand quelqu'un clique sur le bouton "Afficher les vidéos"). J'ai très peu d'expérience avec les capacités ajax de jQuery. Je voudrais l'appel ajax être réalisé à l'intérieur de quelque chose comme ceci:Charger la fonction PHP avec 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(); 
      });

Ok j'ai créé ce sur la base des réponses, mais il ne fonctionne toujours pas:

code 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(); 
      }); 
     }); 


Et le code 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')); 
    } 
+0

$ .ajax() ??? Voir: http://api.jquery.com/category/ajax/ –

+0

Aussi oublié de mentionner, je voudrais passer des variables à travers la fonction (c'est à dire getYoutubeVideos ($ Variables1, $ Variable2);) –

+0

pour une raison quelconque, j'ai eu le Fonction json de travailler en chantant la fin de la fonction de ('json');) à ({}, 'json');). Je ne sais pas pourquoi les supports sont nécessaires, mais cela fonctionne. Cependant, les variables de recherche ne sont toujours pas envoyées correctement. –

Répondre

0

Ok voici ce qui a fini par travailler:
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 encodage était ennuyeux, pas sûr si JSON est hte meilleure façon de le faire , Je pourrais aussi utiliser la fonction jQuery.post, car le vrai problème était avec le PHP. Si quelqu'un connaît des problèmes de sécurité avec la méthode que je fais, s'il vous plaît faites le moi savoir. Cela semble bien.

2
$.post('Videos.php', { 
    'action': 'getYoutubeVideos' 
}, function(data) { 
    // do your stuff 
}, 'json'); 

Dans votre code php, faire quelque chose comme ceci:

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

Puis data dans votre fonction JavaScript sera le tableau/objet/valeur retournée par getYoutubeVideos().

0

Je voudrais faire la partie JS comme décrit par ThiefMaster, mais la partie php serait je gérer un peu différent.

je ferais quelque chose comme ceci:

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

Mais attention, si vous avez des méthodes de la classe qui ne devrait pas être appelé par l'utilisateur, creux la manipulation des données POST, alors vous avez besoin d'une certaine façon pour ajouter à la liste blanche les méthodes que le JavaScript peut appeler. Vous pouvez le faire en préfixant les méthodes i.e:

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

ou par simple condition de basculement.

+0

Ok, je suis toujours aux prises avec tout le concept. Voici mon idée principale: 1.La fonction getYoutubeVideos a une variable appelée search, donc j'ai besoin d'envoyer les termes de recherche à la fonction afin d'obtenir des résultats (par exemple getYoutubeVideo ($ SearchTerm1. ''. $ SearchTerm2)). le script jQuery aura déjà ces termes préparés en utilisant une instruction foreach différente, qui génère les liens, alors comment puis-je envoyer des variables prédéfinies de jQuery, à la fonction php de cette façon? $ .ajax ("Videos.php", {SearchTerm1: "mot1", SearchTerm2: "mot2"}, function (données) { $ (# VideoPreview1) .html (données); // Les données PHP sont retournées ici ? } –