2010-05-10 94 views
1

我有一個文件加載在我的文檔頂部,名爲Videos.php。該文件內有幾個功能,如getYoutubeVideos。在某些頁面上,我需要多次調用該函數(最多50次),並且它在加載時間上當然會造成嚴重滯後。所以我一直試圖找出如何調用該功能,只有當它需要(當有人點擊顯示視頻按鈕)。我對jQuery的ajax能力很少有經驗。我想Ajax調用的東西在裏面待了這樣:使用jQuery加載PHP函數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')); 
    } 
+0

$ .ajax()???請參閱:http://api.jquery.com/category/ajax/ – 2010-05-10 07:55:08

+0

也忘了提及,我想通過函數傳遞變量(即getYoutubeVideos($ Variables1,$ Variable2);) – 2010-05-10 08:53:57

+0

由於某種原因,我得到了json函數通過將函數的結尾從('json');)移動到({},'json');)來工作。不知道爲什麼括號是必需的,但它的工作原理。搜索變量仍然沒有得到正確發送,但是,接下來的工作。 – 2010-05-11 16:52:52

回答

0

確定這裏就是結束了工作:
PHP代碼

 
    $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。如果有人知道我正在使用的方法存在安全問題,請告訴我。似乎很好,但。

2
$.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返回的數組/對象/值。

0

我會做像ThiefMaster描述的JS部分,但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 /開關狀態。

+0

好吧,我仍然在爲整個概念而努力。這是我的主要想法: 1。getYoutubeVideos函數有一個名爲search的變量,所以我需要將搜索條件發送到函數以獲得結果(即getYoutubeVideo($ SearchTerm1。'。。$ SearchTerm2))。 jQuery腳本已經使用不同的foreach語句準備了這些術語,這些術語會生成鏈接,那麼如何將預設變量從jQuery發送到php函數呢? $ .ajax(「Videos.php」,{SearchTerm1:「word1」,SearchTerm2:「word2」}, function(data){(#VideoPreview1).html(data); // PHP Data Returned Here ? } – 2010-05-10 23:31:37