如何从不同的函数中获取变量

时间:2015-10-25 19:29:59

标签: javascript jquery html html5

所以我要做的是从一个函数getRandomVideo()中获取一个搜索项并在jQuery语句中使用它,例如,从变量搜索中获取beethoven并将其用作搜索项以获取JSON信息并将其附加到div。我对jQuery几乎一无所知,所以任何帮助都会非常棒,谢谢:)

<script type="text/javascript">
                    function getRandomVideo() {
                        var videos = [
                            'https://www.youtube.com/embed/kiTO7c_qeZs',
                            'https://www.youtube.com/embed/z4Hfv00eqoI',
                            'https://www.youtube.com/embed/7cdZYQB5ONE',
                            'https://www.youtube.com/embed/i1gE3nyQnKg',
                        ];
                        var titles = [
                            'Beethoven - Music, Love and Wine',
                            'Mozart String Serenade No.13',
                            'Beethoven Sonata No. 31 in A Flat Major',
                            "Debussy - Children's Corner",
                        ];
                        var images = [
                            "url('Assets/beethoven.jpg')",
                            "url('Assets/mozart.jpg')",
                            "url('Assets/beethoven.jpg')",
                            "url('Assets/debussy.jpg')",
                        ]
                        var searches = [
                            'beethoven',
                            'mozart',
                            'beethoven',
                            'debussy',
                        ]
                        var rand = Math.floor(Math.random()*videos.length);
                        var video = videos[rand];
                        var title = titles[rand];
                        var image = images[rand];
                        var search = searches[rand]; 

                        document.getElementById("songTitle").innerHTML = title;
                        document.getElementById("img").style.backgroundImage = image;
                        var htmlVideo = document.getElementById("randomVideo");
                        htmlVideo.src = video;
                        htmlVideo.onload=null;  
                        return search
                    }
                    getRandomVideo();

                    $(document).ready(function(){

                            // Im not sure what to do here to get it to run when the page starts                           
                            // Get the value from our getRandomVideo()
                            var searchTerm = getRandomVideo();

                            var url = "http://api.trove.nla.gov.au/result?key=jja10ssv4950uh65&encoding=json&zone=newspaper&sortby=relevance&q=" + searchTerm + "&s=0&n=5&include=articletext,pdf&encoding=json&callback=?";

                            /*  
                            *   Perform the search using jQuery's getJSON method
                            *   Requires the search URL
                            */  
                            console.log(url);

                            $.getJSON(url, function(data) {

                                $.each(data.response.zone[0].records.article, function(index, value) {
                                    $("#output").append("<p>" + value.articleText +"</p>");
                                });
                        });
                    };
                </script>

1 个答案:

答案 0 :(得分:0)

这应该让你知道如何实现这个目标......

var getRandomVideo = (function(){

        var _videos = [
            'https://www.youtube.com/embed/kiTO7c_qeZs',
            'https://www.youtube.com/embed/z4Hfv00eqoI',
            'https://www.youtube.com/embed/7cdZYQB5ONE',
            'https://www.youtube.com/embed/i1gE3nyQnKg',
        ];

        var _titles = [
            'Beethoven - Music, Love and Wine',
            'Mozart String Serenade No.13',
            'Beethoven Sonata No. 31 in A Flat Major',
            "Debussy - Children's Corner",
        ];

        var _images = [
            "url('Assets/beethoven.jpg')",
            "url('Assets/mozart.jpg')",
            "url('Assets/beethoven.jpg')",
            "url('Assets/debussy.jpg')",
        ];

        var _searches = [
            'beethoven',
            'mozart',
            'beethoven',
            'debussy',
        ];

        return {

            videos: function(){ return _videos; },

            titles: function(){ return _titles; },

            images: function(){ return _images; },

            searches: function(){ return _searches; }
        };

    })(); // this is the module pattern FYI

    var rand = Math.floor(Math.random() * getRandomVideo.videos().length);

    var video = getRandomVideo.videos()[rand];
    var title = getRandomVideo.titles()[rand];
    var image = getRandomVideo.images()[rand];
    var search = getRandomVideo.searches()[rand]; 

    document.getElementById("songTitle").innerHTML = title;
    document.getElementById("img").style.backgroundImage = image;
    var htmlVideo = document.getElementById("randomVideo");

在javascript中,包含变量在内的所有内容都按函数确定范围,因此任何在函数内声明的变量如...

function myFunction()
{
    var a1 = "something";
}

var test = a1; // a1 would be undefined as it is out of scope of `myFunction()` so test would be too of course

通过使用模块模式,您可以在return{};语句中公开属性/函数。注意:下划线只是用于标识私有函数/对象等;)

此外,如果您要执行以下操作,您将能够访问a1,因为它将级联到全局范围,因为它尚未声明...

function myFunction()
{
    a1 = "something"; 
}

var test = a1; // a1 would be "something"

但出于多种架构原因,我不建议这样做: - /