AJAX - вернуть ответный текст - PullRequest
0 голосов
/ 24 января 2012

Я видел множество потоков, разбросанных по Интернету, о следующем похожем коде в запросе 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 раз) с вероятностью незначительного проблема здесь или там, которая ломает приложение.

Мой метод ДОЛЖЕН явно 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 Ответ

3 голосов
/ 25 января 2012

Проведя небольшое исследование, я наткнулся на этот пост SOF: Ajax responseText возвращается как неопределенное

Исходя из этого поста, похоже, что вы, возможно, захотите реализовать свой метод 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.Дайте мне знать, если это не вернет вам правильные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...