AJAX - 返回responseText

时间:2012-01-24 17:16:01

标签: ajax xmlhttprequest scope

我已经看到无数线程在互联网上蔓延,关于返回undefined的AJAX请求中的以下类似代码:

AJAX.onreadystatechange = function() {
        if(AJAX.readyState == 4) {
            if(AJAX.status == 200) {
                var response = AJAX.responseText;
                return response;
            }
            else {
                window.alert('Error: ' + AJAX.status);
                return false;
            }
        }
};

我知道我应该“对responseText做一些事情,就像把它写入HTML一样。问题:我没有那么奢侈。这段代码旨在用于运行快速AJAX请求的通用方法,这样做所有用于发出AJAX请求的代码都不必一次又一次地写出(~40×)并且有可能是次要的这里或那里的问题打破了申请。

我的方法 HAS 明确return responseText“或者其他。” 不写HTML。 我该怎么做?另外,我很欣赏JQuery缺少插件。

我在寻找:

function doAjax(param) {
    // set up XmlHttpRequest
    AJAX.onreadystatechange = function() {
            if(AJAX.readyState == 4) {
                if(AJAX.status == 200) {
                    var response = AJAX.responseText;
                    return response;
                }
                else {
                    window.alert('Error: ' + AJAX.status);
                    return false;
                }
            }
    };
    // send data
}
...
function doSpecificAjax() {
    var param = array();
    var result = doAjax(param);
    // manipulate result
}

1 个答案:

答案 0 :(得分:3)

做了一点研究我遇到了这个SOF帖子: Ajax responseText comes back as undefined

基于该帖子,您可能希望实现这样的ajax方法:

function doRequest(url, callback) {
    var xmlhttp = ....; // create a new request here

    xmlhttp.open("GET", url, true); // for async
    xmlhttp.onreadystatechange=function() {     
        if (xmlhttp.readyState==4) {
            if (xmlhttp.status == 200) {

                // pass the response to the callback function
                callback(null, xmlhttp.responseText);

            } else {
                // pass the error to the callback function
                callback(xmlhttp.statusText);
            }
        }
    }
    xmlhttp.send(null);
}

然后,您可以像这样调用该方法......

doRequest('http://mysite.com/foo', function(err, response) { // pass an anonymous function
    if (err) {
        return "";

    } else {
        return response;
    } 
});

这应该准确地返回responseText。如果这不能给你正确的结果,请告诉我。