如何使Javascript数组全局化?

如何使Javascript数组全局化?,javascript,jquery,Javascript,Jquery,原谅我,我需要一点帮助,我没有编码员的头脑,事实上,我很惊讶我走了这么远,但现在我需要一点帮助 我正在尝试构建一个播放器,将html文件从xml文件加载到div中,然后使用“上一页”和“下一页”按钮浏览页面。到目前为止,我已经设法加载xml,将其转换为数组并加载第一个页面,但当我单击“上一个”和“下一个”按钮时,我得到了“页面未定义” 代码如下: $(document).ready(function(){ var i = 0; $.ajax({ type: "

原谅我,我需要一点帮助,我没有编码员的头脑,事实上,我很惊讶我走了这么远,但现在我需要一点帮助

我正在尝试构建一个播放器,将html文件从xml文件加载到div中,然后使用“上一页”和“下一页”按钮浏览页面。到目前为止,我已经设法加载xml,将其转换为数组并加载第一个页面,但当我单击“上一个”和“下一个”按钮时,我得到了“页面未定义”

代码如下:

$(document).ready(function(){

    var i = 0;

    $.ajax({
        type: "GET",
        url: "studyguide/new_course.xml",
        dataType: "xml",
        success: function(xml) {          
            pages = parseXml(xml)
            doStuff(pages);
            loadFirstPage(pages);
        } // END success
    }); //END ajax

    function parseXml(xml) {
        var pages = [];
        $(xml).find("page").each(function() {
            pages.push({
                title: $(this).find("title").text(), 
                url: $(this).find("url").text()
            }); // END .push
        }); // END .each
        return pages;
    } // END parseXML

    function doStuff(pages) {
        //Do some javascript stuff with the response
        alert(pages[0].title);
        alert(pages[0].url);
    } // END doStuff

    function loadFirstPage(pages){
        //alert(pages[i].url);
        $('#displayResults').html('<img src="../images/495.gif" />');
        $( "#displayResults" ).load(pages[i].url, function() {
        }) //END .load
    }; //END loadFirstPage

    function loadPage(pages){
        //alert(pages[i].url);
        $('#displayResults').html('<img src="../images/495.gif" />');
        $( "#displayResults" ).load(pages[i].url, function() {
        }) //END .load
    };// END loadPage

    $('#prev').bind('click', function(pages) {
        i--;
        //alert(i);
        loadPage();
    }) //END click

    $('#next').bind('click', function(pages) {
        i++;
        //alert(i);
        loadPage();
    }) // END click

}); // END ready
$(文档).ready(函数(){
var i=0;
$.ajax({
键入:“获取”,
url:“studyguide/new_course.xml”,
数据类型:“xml”,
成功:函数(xml){
pages=parseXml(xml)
多斯塔夫(页);
加载第一页(页);
}//最终成功
});//结束ajax
函数解析xml(xml){
var页面=[];
$(xml).find(“page”).each(函数(){
页面推送({
title:$(this).find(“title”).text(),
url:$(this.find(“url”).text()
})/结束。推
})//END.每个
返回页面;
}//结束解析XML
函数doStuff(页){
//对响应执行一些javascript操作
警报(页面[0]。标题);
警报(页面[0].url);
}//结束时间
函数loadFirstPage(页){
//警报(页面[i].url);
$('#displayResults').html('');
$(“#displayResults”).load(页面[i].url,函数(){
})//END.load
};//结束加载第一页
函数加载页(页){
//警报(页面[i].url);
$('#displayResults').html('');
$(“#displayResults”).load(页面[i].url,函数(){
})//END.load
};//结束加载页
$('#prev').bind('click',函数(页面){
我--;
//警报(一);
loadPage();
})//结束单击
$(“#下一步”).bind('click',函数(页面){
i++;
//警报(一);
loadPage();
})//结束单击
}); // 准备就绪
以及xml:

<?xml version="1.0" encoding="iso-8859-1"?>
<course>
    <section name = "Section One">
        <page>
            <title>Page 1</title>
            <url>studyguide/page1.html</url> 
            <instructions></instructions>   
        </page> 
        <page>
            <title>Page 2</title>
            <url>studyguide/page2.html</url> 
            <instructions></instructions>   
        </page>
        <page>
            <title>Page 3</title>
            <url>studyguide/page3.html</url> 
            <instructions></instructions>   
        </page>
    </section>
    <section name = "Section Two">
        <page>
            <title>Page 1</title>
            <url>studyguide/page4.html</url> 
            <instructions></instructions>   
        </page>
        <page>
            <title>Page 2</title>
            <url>studyguide/page5.html</url> 
            <instructions></instructions>   
        </page>
    </section>
</course>

第1页
studyguide/page1.html
第2页
studyguide/page2.html
第3页
studyguide/page3.html
第1页
studyguide/page4.html
第2页
studyguide/page5.html
所以我有两个问题,首先,我如何使数组成为全局数组,以便loadPage函数可以使用它。第二,首先,有没有更好的方法来做到这一点。xml可以包含5页或100页,因此我希望保持动态

谢谢

谢谢你们的帮助。我做了一些修改,现在我得到“页面[I]是未定义的。很抱歉,我天生不是一个编码员,所以你必须慢慢地跟我走

$(document).ready(function(){

    var i = 0;
    var pages = [];

    $.ajax({
        type: "GET",
        url: "studyguide/new_course.xml",
        dataType: "xml",
        success: function(xml) {          
            pages = parseXml(xml)
            doStuff(pages);
            loadFirstPage(pages);
        } // END success
    }); //END ajax

    function parseXml(xml) {
        //var pages = [];
        $(xml).find("page").each(function() {
            pages.push({
                title: $(this).find("title").text(), 
                url: $(this).find("url").text()
            }); // END .push
        }); // END .each
        return pages;
    } // END parseXML

    function doStuff(pages) {
        //Do some javascript stuff with the response
        alert(pages[0].title);
        alert(pages[0].url);
    } // END doStuff

    function loadFirstPage(pages){
        //alert(pages[i].url);
        $('#displayResults').html('<img src="../images/495.gif" />');
        $( "#displayResults" ).load(pages[i].url, function() {
        }) //END .load
    }; //END loadFirstPage

    function loadPage(pages){
        //alert(pages[i].url);
        $('#displayResults').html('<img src="../images/495.gif" />');
        $( "#displayResults" ).load(pages[i].url, function() {
        }) //END .load
    };// END loadPage

    $('#prev').bind('click', function(pages) {
        i--;
        //alert(i);
        loadPage(pages);
    }) //END click

    $('#next').bind('click', function(pages) {
        i++;
        alert(i);
        loadPage(pages);
    }) // END click

}); // END ready
$(文档).ready(函数(){
var i=0;
var页面=[];
$.ajax({
键入:“获取”,
url:“studyguide/new_course.xml”,
数据类型:“xml”,
成功:函数(xml){
pages=parseXml(xml)
多斯塔夫(页);
加载第一页(页);
}//最终成功
});//结束ajax
函数解析xml(xml){
//var页面=[];
$(xml).find(“page”).each(函数(){
页面推送({
title:$(this).find(“title”).text(),
url:$(this.find(“url”).text()
})/结束。推
})//END.每个
返回页面;
}//结束解析XML
函数doStuff(页){
//对响应执行一些javascript操作
警报(页面[0]。标题);
警报(页面[0].url);
}//结束时间
函数loadFirstPage(页){
//警报(页面[i].url);
$('#displayResults').html('');
$(“#displayResults”).load(页面[i].url,函数(){
})//END.load
};//结束加载第一页
函数加载页(页){
//警报(页面[i].url);
$('#displayResults').html('');
$(“#displayResults”).load(页面[i].url,函数(){
})//END.load
};//结束加载页
$('#prev').bind('click',函数(页面){
我--;
//警报(一);
加载页(页);
})//结束单击
$(“#下一步”).bind('click',函数(页面){
i++;
警报(一);
加载页(页);
})//结束单击
})//结束准备就绪

要回答第一个问题,如果不在变量声明前放置
var
,它将变为全局变量(在窗口对象上)。这样做通常被认为是个坏主意。我个人可能会在
ready
函数中声明变量,然后将其用于该范围内的其他函数

这里的另一个观察结果是,您使用一个参数设置了
loadPage
函数,但是在对它的调用中没有传递任何内容


不过,我认为您的方法工作得很好。

使用
window.varname=…
。只需声明声明
I
的数组:
var I=0,pages=[];
。别忘了从parseXML函数中删除它。我刚刚添加了警报(pages.length);添加到doStuff函数,结果弹出一个数字为5的弹出窗口,这是正确的,但当我将相同的警报添加到loadpages函数时,我得到了相同的警报,但数字现在是1?@user2961753您是否可以创建一个JSFIDLE?这将使查看您的问题变得更加容易。修复了它!刚刚删除了“页面”“从函数加载页(页),它工作了。谢谢你的帮助。@ USER 961753你应该考虑接受这个问题的答案。