2012-01-24 3 views
0

Я видел бесчисленные темы развалились через Интернет примерно следующий подобный код в качестве запроса AJAX возвращения неопределенный:AJAX - Возвращение responseText

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 
} 
+0

Не могли бы вы объяснить, что означает «Не писать в HTML»? –

+0

Как ни в коем случае не записывать результат в 'div' как средство хранения для значения. –

+0

Итак, не могли бы вы просто вернуться? ", Если responseText ничего не имеет? –

ответ

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; 
    } 
}); 

Это должно возвращать ответText точно. Дайте мне знать, если это не даст вам верных результатов.

+0

Спасибо! Это мешает мне повторять целые настройки запросов каждый раз, когда я хочу их выполнить. –

+0

@DissidentRage - рад это услышать. –

Смежные вопросы