В myFunction
переменная xmlhttp
не входит в область действия функции. Это должно вызывать ошибку JavaScript, которую вы можете просмотреть в Chrome, выбрав Меню> Инструменты> Консоль JavaScript. Один из способов исправить это - передать объект xmlhttp
в качестве параметра.
function loadXMLDoc(url , cfunc) {
//some code...
xmlhttp.onreadystatechange=function() {
//pass xmlhttp as a parameter to this function and preserve the context
//see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call
cfunc.call(this, xmlhttp);
}
//some more code...
}
function myFunction() {
loadXMLDoc("ajax_info.txt", function(xmlhttp) {
//xmlhttp is now in scope because we passed it as a parameter
});
}
Обновление
Я создал рабочий пример на http://jsfiddle.net/6rPgE/
Что касается вашего вопроса о модификациях, которые я предложил ...
Вторым параметром метода loadXMLDoc
(cfunc
) является функция. В этом случае внутри myFunction
создается анонимная функция, которая будет передана в качестве параметра cfunc
в loadXMLDoc
. Когда вызывается обратный вызов onreadystatechange
, функция cfunc
вызывается с xmlhttp
в качестве первого параметра. Этот параметр передается в анонимную функцию, определенную внутри myFunction
, и отвечает за фактическое выполнение чего-либо с ответом AJAX. С другой стороны, я настоятельно рекомендую использовать отладчик ( Chrome имеет один встроенный ) и информацию, предоставленную консолью ошибок браузера, чтобы помочь вам в устранении этих проблем в будущем. Изучение использования отладчика сэкономит вам бесчисленные часы удара головой об стену.
Обновление 2
Просто подумал, что было бы неплохо посмотреть, как это можно сделать с помощью jQuery, с немного меньшим количеством кода. AJAX - это одна из областей, где может быть очень полезно использовать библиотеку, которая абстрагирует детали.
Другой пример, который использует jQuery на http://jsfiddle.net/j9QvE/1/
Обновление 3
Обратите внимание, что в моем коде я заменил путь к ajax_info.txt на путь , специально используемый для тестирования функциональности AJAX в jsFiddle (/ echo / js /? Js = Success!). Это было необходимо, поскольку ajax_info.txt не существует на серверах jsFiddle, поэтому его запрос мог привести к ошибке 404. Не забудьте изменить путь, чтобы указать на соответствующий ресурс в вашем собственном домене.