在this讨论和聊天中,我明白回调是唯一的方法!
” 从服务器获取一个带有ajax的链接,在变量中写入链接,用这个链接打开一个xml,用xml做一些东西:回调是唯一的方法吗? “
我正在努力了解回调是什么。我读了一些博客,但我仍有问题。
我现在在JS中所拥有的是
1)打开xml的函数。
2)在第一个函数
中请求xml链接的函数有人可以在PLAIN JAVASCRIPT中提供如何嵌套这两个函数的例子吗?
服务器生成xml的链接,因为我正在建立一个多用户网站,每个用户都拥有自己的xml。所以我需要询问服务器什么是xml的链接然后打开它。有没有一种简单的方法来实现这一目标?我需要普通的javascript没有jquery。 谢谢!
答案 0 :(得分:2)
通常,“回调”是一个函数,它将在异步过程完成后执行。
因此,您可以从定义从服务器检索数据时应该发生的功能开始(“第二”功能,直观地说,但是您应该首先定义它,因为它是您希望实现的业务功能而不是只是一个实施问题)。简单的事情:
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
};
答案 1 :(得分:1)
对不起,@大卫
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
}
}
答案 2 :(得分:0)
如果您只需要下载xml,则不需要回调。只需看看jquery和ajax。无法从服务器检索回调。 JSONP确实处理了服务器调用的回调(实际上它们不是)Butter你不需要它。我想你是在传递xhttprequestobject
答案 3 :(得分:0)
callback function只是一段可执行代码,作为参数传递给另一段代码。例如:
function first (arr, predicate) {
// no predicate supplied, return first element
if (!predicate) return arr[0];
for (var i = 0; i < arr.length; i++) {
// return first element satisfying predicate
if (predicate(arr[i])) return arr[i];
}
// no element satisfying predicate, return null
return null;
}
// second parameter is an anonymous function
// will alert 4, as it's the first element which will return true
alert(first([1, 2, 3, 4, 5, 6], function(n) { return n > 3; }));
回调对于异步任务或在运行时需要额外自定义的库函数非常有用。