【问题标题】:Load PHP function with jQuery Ajax使用 jQuery Ajax 加载 PHP 函数
【发布时间】:2011-02-17 13:37:50
【问题描述】:

我的文档顶部加载了一个文件,名为Videos.php。该文件内有几个函数,例如getYoutubeVideos。在某些页面上,我需要多次调用该函数(最多 50 次),这当然会造成加载时间的严重滞后。所以我一直在试图弄清楚如何调用该函数,只有在需要时(当有人点击显示视频按钮时)。我对 jQuery 的 ajax 能力几乎没有经验。我希望在这样的内部进行 ajax 调用:

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

                                //这里的AJAX东西

                防止默认();
            });

好的,我已经根据回复创建了这个,但它仍然无法正常工作:

jQuery代码:

jQuery(文档).ready(函数(){ jQuery("a[rel=VideoPreview5]").click(function(){ jQuery("a[rel=VideoPreview5]").hide(); jQuery("a[rel=HideVideoPreview5]").show(); jQuery.post("/Classes/Video.php", {action: "getYoutubeVideos", 艺术家:“火车”,曲目:“嘿,灵魂姐姐”}, 功能(数据){ jQuery("#VideoPreview5").html(数据); }, 'json'); jQuery("#VideoPreview5").show(); 防止默认(); }); jQuery("a[rel=HideVideoPreview5]").click(function(){ jQuery("a[rel=VideoPreview5]").show(); jQuery("a[rel=HideVideoPreview5]").hide(); jQuery("#VideoPreview5").hide(); 防止默认(); }); });


以及 PHP 代码:

$Action = isset($_POST['action']); $Artist = isset($_POST['artist']); $Track = isset($_POST['track']); if($Action == 'getYoutubeVideos') { echo '视频在哪里'; echo json_encode(getYoutubeVideos($Artist.' '.$Track, 1, 5, 'relevance')); }

【问题讨论】:

  • $.ajax() ???见:api.jquery.com/category/ajax
  • 另外忘了提,我想通过函数传递变量(即getYoutubeVideos($Variables1, $Variable2);)
  • 出于某种原因,我通过将函数的结尾从 ('json');) 更改为 ({},'json');) 来使 json 函数工作。不知道为什么需要括号,但它有效。然而,搜索变量仍然没有被正确发送,所以接下来继续。

标签: php jquery ajax function


【解决方案1】:
$.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());
}

那么你的 JavaScript 函数中的 data 将是 getYoutubeVideos() 返回的数组/对象/值。

【讨论】:

    【解决方案2】:

    我会像 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/switch 条件。

    【讨论】:

    • 好吧,我还在为整个概念而苦苦挣扎。这是我的主要想法: 1. getYoutubeVideos 函数有一个名为 search 的变量,所以我需要将搜索词发送给函数以获得结果(即 getYoutubeVideo($SearchTerm1.' '.$SearchTerm2))。 jQuery 脚本已经使用不同的 foreach 语句准备了这些术语,该语句会生成链接,那么如何将预设变量从 jQuery 发送到 php 函数呢? $.ajax("Videos.php", {SearchTerm1: "word1", SearchTerm2: "word2"}, function(data){ $(#VideoPreview1).html(data); //这里返回的PHP数据?}跨度>
    【解决方案3】:

    好的,这就是最终的工作:
    PHP 代码

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


    查询

    jQuery.ajax({ 类型:“发布”, url: "/Classes/Video.php", 数据:“action=getYoutubeVideos&artist=artist&track=track”, 成功:函数(数据){ jQuery("#VideoPreview1").html(数据); } });

    json 编码很烦人,不确定 json 是否是更好的方法,我实际上也可以使用 jQuery.post 函数,因为真正的问题出在 PHP 上。如果有人知道我正在使用的方法存在任何安全问题,请告诉我。不过看起来还不错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-17
      • 2018-02-10
      • 2011-05-08
      • 2011-01-17
      • 1970-01-01
      相关资源
      最近更新 更多