Javascript 全局变量的替代方案?

Javascript 全局变量的替代方案?,javascript,jquery,xml,xml-parsing,Javascript,Jquery,Xml,Xml Parsing,我正试着去思考全局变量的替代方案 这里讨论的例子是,我需要在一个XML中找到值,并与另一个XML(或更多)进行比较。由于XMLjQuery本身就是一个函数,其下的操作是函数(ugh)中的函数,因此我无法从两个函数中获得一个值并全局使用它 因此,目前我不可能从一个文件中获取XML值并使用它过滤另一个XML文件,这就是我需要帮助的地方 我收到了3个XML文件 文件1-categories.xml-包含类别映射 ex 真的 假的 真的 真的 假的 假的 文件2=oa.xml-包含每个oa记录的值

我正试着去思考全局变量的替代方案

这里讨论的例子是,我需要在一个XML中找到值,并与另一个XML(或更多)进行比较。由于XMLjQuery本身就是一个函数,其下的操作是函数(ugh)中的函数,因此我无法从两个函数中获得一个值并全局使用它

因此,目前我不可能从一个文件中获取XML值并使用它过滤另一个XML文件,这就是我需要帮助的地方

我收到了3个XML文件

文件1-categories.xml-包含类别映射 ex


真的
假的
真的
真的
假的
假的
文件2=oa.xml-包含每个oa记录的值 ex


名字1
城市
装货单
等等

文件3=EP.xml-包含每个EP记录的值 复制代码

<EP>
      <object 1></object1>
      <object 2></object2>
      <object 3></object3>
</EP>
<script>
      var catid = ""; // I thought this, being outside of the function would be a global varaible
      OA1 = ""; // I tried it with and without var in front
      var OAid = "";
      $(document).ready(function(){ //When opening an XML we do it in a function
        $.ajax({
            type: "GET",
            url: "xml/categories.xml",
            dataType: "xml",
            success: function(xml) {
                $(xml).find('Cat').each(function(){
                                                //Next 2 rows don't matter b/c I can't use their values outside 
                                                //of the function
                  var catid = $(this).find('Catid').text(); 
                  var OA1 = $(this).find('OA1').text();

                  $('<div class="page-wrap"></div>').html('<table><tr><td>' + catid +'</td><td>OA1 '+ OA1 +'</td></tr></table></div>').appendTo('#page-wrap');

                });
        }
       });
      });
//The only way I know how to open up the next XML, start all over again
      $(document).ready(function(){
        $.ajax({
            type: "GET",
            url: "xml/OA.xml",
            dataType: "xml",
            success: function(xml) {
                $(xml).find('OAData').each(function(){
                  var OAid = $(this).find('OAid').text();
                  $('<div class="page-wrap"></div>').html('<table><tr><td>OA ID is '+ OAid +'</td></tr></table></div>').appendTo('#page-wrap');

                });
            }
          });
         });
</script>
//Somebody shoot me

现在,当我开始时,我认为我可以做的是允许用户选择一个类别,并根据该选择返回两个表,其中包含映射到该类别的值

我的问题是,当JQuery开始解析XML时,它会在一个函数中解析XML(在我看到的所有示例中),因此我不知道如何在一个函数中设置变量,并在用于打开第二个文件或第三个文件的下一个函数中使用它

以下是我现在拥有的: 复制代码

<EP>
      <object 1></object1>
      <object 2></object2>
      <object 3></object3>
</EP>
<script>
      var catid = ""; // I thought this, being outside of the function would be a global varaible
      OA1 = ""; // I tried it with and without var in front
      var OAid = "";
      $(document).ready(function(){ //When opening an XML we do it in a function
        $.ajax({
            type: "GET",
            url: "xml/categories.xml",
            dataType: "xml",
            success: function(xml) {
                $(xml).find('Cat').each(function(){
                                                //Next 2 rows don't matter b/c I can't use their values outside 
                                                //of the function
                  var catid = $(this).find('Catid').text(); 
                  var OA1 = $(this).find('OA1').text();

                  $('<div class="page-wrap"></div>').html('<table><tr><td>' + catid +'</td><td>OA1 '+ OA1 +'</td></tr></table></div>').appendTo('#page-wrap');

                });
        }
       });
      });
//The only way I know how to open up the next XML, start all over again
      $(document).ready(function(){
        $.ajax({
            type: "GET",
            url: "xml/OA.xml",
            dataType: "xml",
            success: function(xml) {
                $(xml).find('OAData').each(function(){
                  var OAid = $(this).find('OAid').text();
                  $('<div class="page-wrap"></div>').html('<table><tr><td>OA ID is '+ OAid +'</td></tr></table></div>').appendTo('#page-wrap');

                });
            }
          });
         });
</script>
//Somebody shoot me

var catid=“”;//我认为这是一个全局变量,不在函数范围内
OA1=“”;//我试过前面有var和没有var
var-OAid=“”;
$(document).ready(function(){//打开XML时,我们在函数中执行此操作
$.ajax({
键入:“获取”,
url:“xml/categories.xml”,
数据类型:“xml”,
成功:函数(xml){
$(xml).find('Cat').each(function(){
//接下来的两行无关紧要b/c我不能在外部使用它们的值
//函数的性质
var catid=$(this.find('catid').text();
var OA1=$(this.find('OA1').text();
$('').html(''+catid+'OA1'+OA1+'').appendTo(''#换页');
});
}
});
});
//我知道如何打开下一个XML的唯一方法是重新开始
$(文档).ready(函数(){
$.ajax({
键入:“获取”,
url:“xml/OA.xml”,
数据类型:“xml”,
成功:函数(xml){
$(xml).find('OAData').each(function(){
var OAid=$(this.find('OAid').text();
$('').html('OAid为'+OAid+'')。附加到(';
});
}
});
});
//有人开枪打我
任何建议都是最值得赞赏的——我甚至不能考虑变量问题的比较操作B/C。


有没有一种方法可以比较2个XML文件,而我只是缺少它,或者您可以推荐一种使用某种临时位置的解决方案?

因此,采纳@Kevin B的建议并对其进行一些增强,如果您将这些函数分解成单独的函数,您可以轻松地将值传递给不同的成功处理程序函数

<script>
      var catid = ""; // I thought this, being outside of the function would be a global varaible
      OA1 = ""; // I tried it with and without var in front
      var OAid = "";
      $(document).ready(function(){ //When opening an XML we do it in a function
        $.ajax({
            type: "GET",
            url: "xml/categories.xml",
            dataType: "xml",
            success: function(xml) {
                $(xml).find('Cat').each(function(){
                                                //Next 2 rows don't matter b/c I can't use their values outside 
                                                //of the function
                  var catid = $(this).find('Catid').text(); 
                  var OA1 = $(this).find('OA1').text();

                  $('<div class="page-wrap"></div>').html('<table><tr><td>' + catid +'</td><td>OA1 '+ OA1 +'</td></tr></table></div>').appendTo('#page-wrap');

                });
              $.ajax({
                type: "GET",
                url: "xml/OA.xml",
                dataType: "xml",
                success: function(xml) { getCategoriesSuccess(xml, catid, OA1, OAid); }
              });
            }
       });
      });

      function getCategoriesSuccess(xml, catid, OA1, OAid) {
        $(xml).find('Cat').each(function(){
                                        //Next 2 rows don't matter b/c I can't use their values outside 
                                        //of the function
          var catid = $(this).find('Catid').text(); 
          var OA1 = $(this).find('OA1').text();

          $('<div class="page-wrap"></div>').html('<table><tr><td>' + catid +'</td><td>OA1 '+ OA1 +'</td></tr></table></div>').appendTo('#page-wrap');

        });
        $.ajax({
            type: "GET",
            url: "xml/OA.xml",
            dataType: "xml",
            success: function(xml) { getOASuccess(xml, OAid); }
          });
         });        
      }

      function getOASuccess(xml, OAid){
        $(xml).find('OAData').each(function(){
          var OAid = $(this).find('OAid').text();
          $('<div class="page-wrap"></div>').html('<table><tr><td>OA ID is '+ OAid +'</td></tr></table></div>').appendTo('#page-wrap');
        });
      }
</script>

var catid=“”;//我认为这是一个全局变量,不在函数范围内
OA1=“”;//我试过前面有var和没有var
var-OAid=“”;
$(document).ready(function(){//打开XML时,我们在函数中执行此操作
$.ajax({
键入:“获取”,
url:“xml/categories.xml”,
数据类型:“xml”,
成功:函数(xml){
$(xml).find('Cat').each(function(){
//接下来的两行无关紧要b/c我不能在外部使用它们的值
//函数的性质
var catid=$(this.find('catid').text();
var OA1=$(this.find('OA1').text();
$('').html(''+catid+'OA1'+OA1+'').appendTo(''#换页');
});
$.ajax({
键入:“获取”,
url:“xml/OA.xml”,
数据类型:“xml”,
成功:函数(xml){getCategoriesSuccess(xml,catid,OA1,OAid);}
});
}
});
});
函数getCategoriesSuccess(xml、catid、OA1、OAid){
$(xml).find('Cat').each(function(){
//接下来的两行无关紧要b/c我不能在外部使用它们的值
//函数的性质
var catid=$(this.find('catid').text();
var OA1=$(this.find('OA1').text();
$('').html(''+catid+'OA1'+OA1+'').appendTo(''#换页');
});
$.ajax({
键入:“获取”,
url:“xml/OA.xml”,
数据类型:“xml”,
成功:函数(xml){getOASuccess(xml,OAid);}
});
});        
}
函数getOASuccess(xml,OAid){
$(xml).find('OAData').each(function(){
var OAid=$(this.find('OAid').text();
$('').html('OAid为'+OAid+'')。附加到(';
});
}
因此,在您的
$(document).ready()
ajax
调用的
success
处理程序中,您可以按照@Kevin B的建议进行第二次
ajax
调用。您可以通过在成功处理程序中包装函数调用来向此传递附加数据。我将在第一个调用中传递第二个嵌套函数调用(在
getCategoriesSuccess
中)所需的数据,以便它可用于第二个调用。这就是为什么我在第一个嵌套函数调用中传递
OAid
,因为它是
getOASuccess
中所需要的

我是