在this讨论和聊天中,我明白了回调是唯一的办法!
“使用ajax从服务器获取链接,将链接写入变量,使用此链接打开xml,使用xml执行一些操作:回调是唯一的方法吗?”
我在试着理解什么是回调。我读了一些博客,但我仍然有问题。
我现在在JS中所拥有的是
1)打开xml的函数。
2)请求第一个函数中的xml链接的函数
有人能用普通的JAVASCRIPT提供一个如何嵌套这两个函数的示例吗?
服务器生成xml的链接,因为我正在制作一个多用户网站,每个用户都有自己的xml。所以我需要向服务器询问xml的链接是什么,然后打开它。有什么简单的方法可以做到这一点吗?我需要普通的javascript,不需要jquery。谢谢!
发布于 2014-01-04 06:22:58
一般而言,“回调”是一个函数,它将在异步过程完成后执行。
因此,您可以从定义从服务器检索数据时应该发生的函数开始(直观地说,是“第二个”函数,但您应该首先定义它,因为它是您希望实现的业务功能,而不仅仅是一个实现问题)。像这样简单的东西:
var doSomethingWithTheData = function () {
// do, well, something with the data
};
这里假设您已经有了数据,但您现在还没有。但是AJAX调用将获得该数据。现在可以使用此函数作为AJAX调用的回调函数。以AJAX example from MDN为例,您可能会看到以下内容:
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
中。因此,还假设您的变量的作用域允许这样做(您可以根据需要进行修改):
var doSomethingWithTheData = function () {
var data = httpRequest.ResponseText;
// do, well, something with the data
};
发布于 2014-01-04 09:59:54
“打扰一下,”大卫
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
}
}
发布于 2014-01-04 06:22:24
如果您只需要下载xml,则不需要回调。只需看看jquery和ajax即可。无法从服务器检索回调。JSONP确实处理由服务器调用的回调(实际上它们不是),但是你不需要它。我认为您正在向xhttprequestobject发送消息
https://stackoverflow.com/questions/20913630
复制相似问题