【发布时间】:2014-06-09 21:16:31
【问题描述】:
新信息开始
通过更改“现有”代码(即我借用的代码)中的一行,将responseXML 替换为responseText,我能够取得一点进展。这解决了一个关键问题,即变量 details 现在包含所需的数据。
在查看包含util.js 的“工作示例”链接时,我还注意到正在使用一个附加功能xmlParse(str)。我没有看到或理解如何使用 xmlParse(str),但这可能是我对 javascript 的天真。
function xmlParse(str) {
if (typeof ActiveXObject != 'undefined' && typeof GetObject != 'undefined') {
var doc = new ActiveXObject('Microsoft.XMLDOM');
doc.loadXML(str);
return doc;
}
那么新版本的谷歌地图 (V3) 是否使用 XML,而以前没有,还是什么?
无论如何,我可能需要就我在main.js 中已经遇到的下一个错误提出一个新问题,不管是什么。
新信息结束
开始完全重写
第一个脚本可用here。我添加了一些console.log() 结果以显示确认信息包含在request.responseText 中的中间结果。
/**
* Returns an XMLHttp instance to use for asynchronous
* downloading. This method will never throw an exception, but will
* return NULL if the browser does not support XmlHttp for any reason.
* @return {XMLHttpRequest|Null}
*/
function createXmlHttpRequest() {
try {
if (typeof ActiveXObject != 'undefined') {
return new ActiveXObject('Microsoft.XMLHTTP');
} else if (window["XMLHttpRequest"]) {
return new XMLHttpRequest();
}
} catch (e) {
changeStatus(e);
}
return null;
};
/**
* This functions wraps XMLHttpRequest open/send function.
* It lets you specify a URL and will call the callback if
* it gets a status code of 200.
* @param {String} url The URL to retrieve
* @param {Function} callback The function to call once retrieved.
*/
function downloadUrl(url, callback) {
var status = -1;
var request = createXmlHttpRequest();
if (!request) {
return false;
}
request.onreadystatechange = function() {
if (request.readyState == 4) {
try {
status = request.status;
} catch (e) {
// Usually indicates request timed out in FF.
}
if (status == 200) {
console.log(request.responseText);
console.log(request.responseXML);
console.log(request.status);
callback(request.responseXML, request.status);
request.onreadystatechange = function() {};
}
}
}
request.open('GET', url, true);
try {
request.send(null);
} catch (e) {
changeStatus(e);
}
};
我的脚本的关键部分如下,问题是details 始终为“null”,从下面的日志读数可以看出。但是我也可以从console.log(request.responseText)看到我需要的数据确实是可用的。
downloadUrl("details.txt?place=Playground",function(details) {
console.log('details: '+details);
if (details) {
var lines = details.split("\n");
}
}
以下是控制台日志。第一行是我希望在变量details 中捕获的信息,并且是request.responseText 的值,因为它代表了一个地图引脚。
如何更改我的代码,甚至是提供的现有代码,以将我的变量details 与现有代码中request.responseText 的结果挂钩?
ahdkZXZ-c2ltcGxpZnljb25uZWN0aW9uc3IlCxIFR3JvdXAiClBsYXlncm91bmQMCxIDUGluGICAgICAgIAKDA Thu 06 12 2014 1444 29.1109258712 -81.4114379883 Dad 0 0
util.js:42
null util.js:43
200 util.js:44
details: null ?place=Playground:114
downloadUrl()is here 的工作示例。 (我在理解如何调整工作示例方面的部分困惑是它使用了 XML,这在我的使用中没有涉及。)
完全重写结束
【问题讨论】:
-
你需要传递函数,而不是调用它。
-
你能说更多吗?我不知道有什么区别。
-
downloadUrl(url,readData())调用函数读取数据,当数据从服务器到达时,使用它返回的值作为函数指针执行。downloadUrl(url,readData);在数据从服务器到达时执行 readData 函数,并传入适当的参数。 -
所以,我只输入
downloadUrl("details.txt?place={{place}}",readData);并收到以下错误。ReferenceError: doc is not defined。那么你能想象我犯的另一个错误吗?比如,有没有办法让doc离开readData,但仍然可以访问传入的数据? -
您的 XML 是什么样的?你能提供一个fiddle 来证明这个问题吗?
标签: javascript google-maps callback