首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用参数进行Ajax回调?

如何使用参数进行Ajax回调?
EN

Stack Overflow用户
提问于 2017-12-14 11:17:43
回答 2查看 57关注 0票数 1

我一直在努力跟踪this问题,这个问题与我的问题部分相同。这个问题希望能够返回Ajax响应。我想要做同样的,但有点不同,我需要使用一个函数内的参数回调?

我该怎么做?如何将两者合并,以便能够返回Ajax请求,同时仍然使用动态参数?

代码语言:javascript
复制
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函数

代码语言:javascript
复制
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);
}

如何将这两者结合起来,以便能够使用回调函数中的参数来使用函数?

编辑-缺少形式参数

代码语言:javascript
复制
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);
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-14 11:32:21

要传递回调多个参数,您可以在调用它时使用just...do:

代码语言:javascript
复制
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:

代码语言:javascript
复制
callback(ajax_http.responseText, url);

...or所有的ajax参数:

代码语言:javascript
复制
callback(ajax_http.responseText, url, parameters, method, form);

...etc。

关于“缺少形式参数”错误,这是不正确的:

代码语言:javascript
复制
ajax(function (results, "ajax.php", "none", "POST", false) {
    alert(results);
});

您正在尝试使用"ajax.php" (和类似的)作为参数,而不是参数。相反:

代码语言:javascript
复制
ajax(function(results) {
    alert(results);
}, "ajax.php", "none", "POST", false);

或者如果将callback移到ajax参数列表的末尾:

代码语言:javascript
复制
function ajax(url, parameters, method, form, callback) {

...then,您可以在函数的末尾调用它:

代码语言:javascript
复制
ajax("ajax.php", "none", "POST", false, function(results) {
    alert(results);
});
票数 1
EN

Stack Overflow用户

发布于 2017-12-14 11:26:03

假设您想在您的

代码语言:javascript
复制
ajax_http.onreadystatechange = function () {
    if (ajax_http.readyState === 4 && ajax_http.status === 200) {
        return this.responseText;
    }
};

函数,没有什么可以阻止您在其中使用parameters,如下所示:

代码语言:javascript
复制
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;
    }
};

如果这不是你的意思,请告诉我

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

https://stackoverflow.com/questions/47812037

复制
相关文章

相似问题

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