首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解/使用回调函数的问题

理解/使用回调函数的问题
EN

Stack Overflow用户
提问于 2014-01-04 06:11:51
回答 4查看 64关注 0票数 0

this讨论和聊天中,我明白了回调是唯一的办法!

“使用ajax从服务器获取链接,将链接写入变量,使用此链接打开xml,使用xml执行一些操作:回调是唯一的方法吗?”

我在试着理解什么是回调。我读了一些博客,但我仍然有问题。

我现在在JS中所拥有的是

1)打开xml的函数。

2)请求第一个函数中的xml链接的函数

有人能用普通的JAVASCRIPT提供一个如何嵌套这两个函数的示例吗?

服务器生成xml的链接,因为我正在制作一个多用户网站,每个用户都有自己的xml。所以我需要向服务器询问xml的链接是什么,然后打开它。有什么简单的方法可以做到这一点吗?我需要普通的javascript,不需要jquery。谢谢!

EN

回答 4

Stack Overflow用户

发布于 2014-01-04 06:22:58

一般而言,“回调”是一个函数,它将在异步过程完成后执行。

因此,您可以从定义从服务器检索数据时应该发生的函数开始(直观地说,是“第二个”函数,但您应该首先定义它,因为它是您希望实现的业务功能,而不仅仅是一个实现问题)。像这样简单的东西:

代码语言:javascript
运行
复制
var doSomethingWithTheData = function () {
    // do, well, something with the data
};

这里假设您已经有了数据,但您现在还没有。但是AJAX调用将获得该数据。现在可以使用此函数作为AJAX调用的回调函数。以AJAX example from MDN为例,您可能会看到以下内容:

代码语言:javascript
运行
复制
var httpRequest;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE 8 and older
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
httpRequest.onreadystatechange = doSomethingWithTheData;
// perform the AJAX request

在AJAX调用执行和完成之后,httpRequest对象将包含来自服务器的响应。(请记住,这是异步发生的,因此它不会在紧接着的下一行代码中包含响应。它会在你无法控制的某个稍后的时间发生。因此需要回调。)

我建议您浏览完整的MDN文章以获取所有详细信息,特别是有关处理错误之类的信息。但是您要查找的数据(假设没有出错)应该在httpRequest.ResponseText中。因此,还假设您的变量的作用域允许这样做(您可以根据需要进行修改):

代码语言:javascript
运行
复制
var doSomethingWithTheData = function () {
    var data = httpRequest.ResponseText;
    // do, well, something with the data
};
票数 2
EN

Stack Overflow用户

发布于 2014-01-04 09:59:54

“打扰一下,”大卫

代码语言:javascript
运行
复制
var httpRequest;
if (window.XMLHttpRequest) { // Mozilla, Safari, 
   httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE 8 and older
   httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
var url = "http://myserver.mydomain/getMyUsersXMLUrl?user=pete";
httpRequest.open("GET", url, true); // next ajax to retrieve XML - File
httpRequest.onreadystatechange = function() {
   if (httpRequest.readyState == 4) { // response received
      var response = httpRequest.responseText; // this should contain you url

      httpRequest.open("GET", response, true); // next ajax to retrieve XML - File
      // and the same as for the first request
   }
}
票数 1
EN

Stack Overflow用户

发布于 2014-01-04 06:22:24

如果您只需要下载xml,则不需要回调。只需看看jquery和ajax即可。无法从服务器检索回调。JSONP确实处理由服务器调用的回调(实际上它们不是),但是你不需要它。我认为您正在向xhttprequestobject发送消息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20913630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档