Подтвердить что ты не робот

Как вернуть текст ответа AJAX?

Я использую прототип для разработки AJAX, и я использую этот код следующим образом:

somefunction: function(){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
            }
        }
    });
    return result;
}

И я нахожу, что "результат" - пустая строка. Итак, я пробовал это:

somefunction: function(){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
                return result;
            }
        }
    });

}

Но это тоже не сработало. Как я могу получить responseText для использования другого метода?

4b9b3361

Ответ 1

помните, что onComplete вызывается долго после выполнения функции someFunction. Что вам нужно сделать, так это передать функцию обратного вызова функции somefunction в качестве параметра. Эта функция будет вызываться, когда процесс будет выполнен (т.е. onComplete):

somefunction: function(callback){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
                callback(result);
            }
        }
    });

}
somefunction(function(result){
  alert(result);
});

Ответ 2

Как насчет добавления "асинхронного: false" в ваш код? В моем случае это сработало хорошо:)