我一直在努力跟踪this问题,这个问题与我的问题部分相同。这个问题希望能够返回Ajax响应。我想要做同样的,但有点不同,我需要使用一个函数内的参数回调?
我该怎么做?如何将两者合并,以便能够返回Ajax请求,同时仍然使用动态参数?
function foo(callback) {
httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState === 4) { // request is done
if (httpRequest.status === 200) { // successfully
callback(httpRequest.responseText); // we're calling our method
}
}
};
httpRequest.open('GET', "/echo/json");
httpRequest.send();
}
foo(function (result) {
alert(result);
});我的Ajax函数
var ajax_http,
ajax_url,
ajax_parameters;
function ajax(url, parameters, method, form = false) {
ajax_http = new XMLHttpRequest();
ajax_url = url;
ajax_http.open(method, ajax_url, true);
if (form === false) {
ajax_parameters = parameters;
ajax_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
} else {
ajax_parameters = new FormData(form);
}
ajax_http.onreadystatechange = function () {
if (ajax_http.readyState === 4 && ajax_http.status === 200) {
return this.responseText;
}
};
ajax_http.send(ajax_parameters);
}如何将这两者结合起来,以便能够使用回调函数中的参数来使用函数?
编辑-缺少形式参数
function ajax(callback, url, parameters, method, form = false) {
var ajax_http,
ajax_url,
ajax_parameters;
ajax_http = new XMLHttpRequest();
ajax_url = url;
ajax_http.open(method, ajax_url, true);
if (form === false) {
ajax_parameters = parameters;
ajax_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
} else {
ajax_parameters = new FormData(form);
}
ajax_http.onreadystatechange = function () {
if (ajax_http.readyState === 4 && ajax_http.status === 200) {
callback(ajax_http.responseText);
}
};
ajax_http.send(ajax_parameters);
}
ajax(function (results, "ajax.php", "none", "POST", false) {
alert(results);
});发布于 2017-12-14 11:32:21
要传递回调多个参数,您可以在调用它时使用just...do:
function ajax(callback, url, parameters, method, form = false) {
// ^^^^^^^^---- *** accept a callback
var ajax_http, // *** These should be locals
ajax_url, // ***
ajax_parameters; // ***
ajax_http = new XMLHttpRequest();
ajax_url = url;
ajax_http.open(method, ajax_url, true);
if (form === false) {
ajax_parameters = parameters;
ajax_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
} else {
ajax_parameters = new FormData(form);
}
ajax_http.onreadystatechange = function () {
if (ajax_http.readyState === 4 && ajax_http.status === 200) {
// *** Call the callback
callback(ajax_http.responseText, anything, else, here, you, like);
}
};
ajax_http.send(ajax_parameters);
}因此,例如,如果您想回显URL:
callback(ajax_http.responseText, url);...or所有的ajax参数:
callback(ajax_http.responseText, url, parameters, method, form);...etc。
关于“缺少形式参数”错误,这是不正确的:
ajax(function (results, "ajax.php", "none", "POST", false) {
alert(results);
});您正在尝试使用"ajax.php" (和类似的)作为参数,而不是参数。相反:
ajax(function(results) {
alert(results);
}, "ajax.php", "none", "POST", false);或者如果将callback移到ajax参数列表的末尾:
function ajax(url, parameters, method, form, callback) {...then,您可以在函数的末尾调用它:
ajax("ajax.php", "none", "POST", false, function(results) {
alert(results);
});发布于 2017-12-14 11:26:03
假设您想在您的
ajax_http.onreadystatechange = function () {
if (ajax_http.readyState === 4 && ajax_http.status === 200) {
return this.responseText;
}
};函数,没有什么可以阻止您在其中使用parameters,如下所示:
ajax_http.onreadystatechange = function () {
console.log(parameters) //Parameters works here!
if (ajax_http.readyState === 4 && ajax_http.status === 200) {
console.log(parameters) //Parameters works here too!
return this.responseText;
}
};如果这不是你的意思,请告诉我
https://stackoverflow.com/questions/47812037
复制相似问题