Javascript 我收到未定义的xml对象。为什么?
我有两个js文件。一个是Javascript 我收到未定义的xml对象。为什么?,javascript,jquery,Javascript,Jquery,我有两个js文件。一个是route.js,第二个是xml.js。在route.js文件中,我正在调用xml.js中的一个函数。该函数的作用是通过xml链接解析并返回xml对象。当我在xml.js中执行console.log($(xml))时,它会显示xml,但当我返回此对象并执行console.log(xml.init(param,param,param))时,它会返回未定义的。为什么? 这是我的密码 route.js var Route = { fromurl : null,
route.js
,第二个是xml.js
。在route.js
文件中,我正在调用xml.js
中的一个函数。该函数的作用是通过xml链接解析并返回xml对象。当我在xml.js中执行console.log($(xml))
时,它会显示xml,但当我返回此对象并执行console.log(xml.init(param,param,param))
时,它会返回未定义的
。为什么?
这是我的密码
route.js
var Route = {
fromurl : null,
tourl : null,
from : null,
to : null,
init: function (fromaddress, toaddress) {
from = fromaddress;
to = toaddress;
fromurl = 'http://example.com/url=' + fromurl;
tourl = 'http://example.com/url=' + tourl;
Route.searchRoute();
},
searchRoute: function () {
console.log(Xml.init(from, to, fromurl)); // <---- this returns undefined why
}
};
init函数不返回任何内容。这里有一个可行的方法:
var Xml = {
to : null,
from : null,
url : null,
result : null,
init: function (fromaddress, toaddress, link) {
from = fromaddress;
to = toaddress;
url = link;
this.requestXml();
return this;
},
requestXml: function () {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: this.parseXml
});
},
parseXml: function (xml) {
console.log($(xml));
result = $(xml);
},
getResult: function () {
return result;
}
};
然后你可以打电话:
searchRoute: function () {
var xml = Xml.init(from, to, fromurl);
console.log(xml.getResult());
}
解释
您的代码尝试从ini()方法获取结果,该方法不返回数据。相反,它调用请求函数,该函数异步调用parseXML()——parseXML()返回的结果在任何地方都不会结束。这就是你的代码。和我的有什么不同
在我的代码中,init()确实返回Xml类的实例。有了这个条件,parseXml可以将结果保存在一个变量中(这里是result)。然后,函数getResult()可以返回xml。init函数不会返回任何内容。这里有一个可行的方法:
var Xml = {
to : null,
from : null,
url : null,
result : null,
init: function (fromaddress, toaddress, link) {
from = fromaddress;
to = toaddress;
url = link;
this.requestXml();
return this;
},
requestXml: function () {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: this.parseXml
});
},
parseXml: function (xml) {
console.log($(xml));
result = $(xml);
},
getResult: function () {
return result;
}
};
然后你可以打电话:
searchRoute: function () {
var xml = Xml.init(from, to, fromurl);
console.log(xml.getResult());
}
解释
您的代码尝试从ini()方法获取结果,该方法不返回数据。相反,它调用请求函数,该函数异步调用parseXML()——parseXML()返回的结果在任何地方都不会结束。这就是你的代码。和我的有什么不同
在我的代码中,init()确实返回Xml类的实例。有了这个条件,parseXml可以将结果保存在一个变量中(这里是result)。然后,函数getResult()可以返回xml。由于AJAX调用(异步调用),您的代码不会返回xml。 相反,您可以触发自己的事件并聆听它们 这应该起作用:
var Route = {
fromurl : null,
tourl : null,
from : null,
to : null,
init: function (fromaddress, toaddress) {
from = fromaddress;
to = toaddress;
fromurl = 'http://example.com/url=' + fromurl;
tourl = 'http://example.com/url=' + tourl;
Route.searchRoute();
},
searchRoute: function () {
$(document).unbind('your_event').bind('your_event', function (event, xml) {
console.log(xml);
});
Xml.init(from, to, fromurl);
}
};
var Xml = {
to : null,
from : null,
url : null,
init: function (fromaddress, toaddress, link) {
from = fromaddress;
to = toaddress;
url = link;
this.requestXml();
},
requestXml: function () {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: this.parseXml
});
},
parseXml: function (xml) {
$(document).trigger('your_event', $(xml));
}
};
由于AJAX调用(异步调用),您的代码不会返回XML。 相反,您可以触发自己的事件并聆听它们 这应该起作用:
var Route = {
fromurl : null,
tourl : null,
from : null,
to : null,
init: function (fromaddress, toaddress) {
from = fromaddress;
to = toaddress;
fromurl = 'http://example.com/url=' + fromurl;
tourl = 'http://example.com/url=' + tourl;
Route.searchRoute();
},
searchRoute: function () {
$(document).unbind('your_event').bind('your_event', function (event, xml) {
console.log(xml);
});
Xml.init(from, to, fromurl);
}
};
var Xml = {
to : null,
from : null,
url : null,
init: function (fromaddress, toaddress, link) {
from = fromaddress;
to = toaddress;
url = link;
this.requestXml();
},
requestXml: function () {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: this.parseXml
});
},
parseXml: function (xml) {
$(document).trigger('your_event', $(xml));
}
};
Xml.init
从不返回任何内容,而且Ajax是异步的。在parseXml
中处理Xml我会时不时地使用相同的Xml对象,我需要从中获取不同类型的数据。这就是我在route.js中解析它的原因。请问还有其他的解决方案吗?可能重复的是怎么可能重复的?这是另一个主题,它无助于解决此问题。Xml.init
从不返回任何内容,而且Ajax是异步的。在parseXml
中处理Xml我将不时使用同一个Xml对象,我需要从中获取不同类型的数据。这就是我在route.js中解析它的原因。请问还有其他的解决方案吗?可能重复的是怎么可能重复的?这是另一个没有帮助解决这个问题的主题;Xml-class中定义了函数getResult。它返回空。你能重新检查你的代码是否正确吗?我必须在某个地方定义getResult()吗?看看我的代码;Xml-class中定义了函数getResult。它返回空。你能重新检查你的代码是否正确吗?我必须在一个文件中添加Xml对象和路由对象吗?这里什么是your_event
?你不必在一个文件中添加Xml和路由代码。事件名称“your_event”只是一个示例。你可以随意命名。唯一的问题是路由和Xml文件中的事件名称必须相同。我必须在一个文件中添加Xml对象和路由对象吗?这里什么是您的\u事件
?您不必在一个文件中添加Xml和路由代码。事件名称“your_event”只是一个示例。你可以随意命名。唯一的问题是路由和Xml文件中的事件名称必须相同。