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