在downloadUrl中,回调函数参数的值是多少

时间:2014-06-09 21:16:32

标签: javascript google-maps callback

新信息开始 通过更改“现有”代码中的一行(即我借用的代码中),将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的值,因为它代表一个地图引脚。

如何更改我的代码,甚至是现有的代码,以便在现有代码中将变量detailsrequest.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,这与我的使用无关。)

完成重写

1 个答案:

答案 0 :(得分:0)

问题的简短回答是,实用程序util.js内部的回调函数需要一个新参数 - request.responseText - 未提供且未提及。在不知不觉中,我专注于我的脚本中的调用函数的参数,而不是在实用程序中。

我还对调用函数的第二个参数是回调函数这一事实感到困惑,但在回调函数本身中,它是第一个需要调整的参数。傻我。