[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вернуть из функции результат АЯКС запроса
Shkiper
Всем привет. У меня есть такой код:
function modal_smiles()
{
var xmlhttp = XmlHttp();
var result = "";

xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
result = xmlhttp.responseText;
}
}

}
;

xmlhttp.open('GET', '/aplication/ajax/get_mSmiles.php', true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send();

return result;
}

Так вот, результат этой функции возвращает пустоту, то есть к переменной не присвоился результат аякса. Я перепроверил readyState and status, все в порядке. Тогда в чем проблема? Есть догадка, что onreadystatechange срабатывает поздно, то есть после того как вывелся результат функции. Скажите это так? если нет, то в чем причина, и как ее решить?
killer8080
Чтоб твоя функция заработала, нужно выполнять запрос в синхронном режиме, но лучше так не делать, т.к js замрет и будет ждать отработки аякса, а он может вообще не отработать иногда, поэтому лучше пересматривай логику приложения. Используй колбеки.
Shkiper
killer8080 я не знаю что такое калбеки smile.gif
Shkiper
kaww все понятно. То есть мне в аргумент функции нужно передать функцию, которая будет вызвана по окончанию запроса?
kaww
Цитата (Shkiper @ 27.02.2013 - 14:54)
То есть мне в аргумент функции нужно передать функцию, которая будет вызвана по окончанию запроса?

только ее нужно самому вызывать в onreadystatechange
Shkiper
kaww вот я написал класс:
  function ajax(url, method, async, data, isComplate, isError) 
{
var xmlhttp;

try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (E)
{
xmlhttp = false;
}
}


if (!xmlhttp && typeof XMLHttpRequest!='undefined')
{
xmlhttp = new XMLHttpRequest();
}

xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
document.write(isComplate(xmlhttp.responseText));
}
else
{
document.write(isError(xmlhttp.readyState = false, xmlhttp.status = false));
}
}
}
;

xmlhttp.open(method, url, async);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send(data);
}


Вот я его тестю:
testAjax.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
Документ без названия</title>
<script
type="text/javascript" src="ajax.class.js"></script>
<script
type="text/javascript">
function
ajax_testing()
{
var result;

ajax(
"ajax.php",
"GET",
true,
"",
function (text)
{
result = text;
},
function()
{
result = "Error";
}
);

return result;
}
</script>
</head>
<body>
<button
onclick="this.value = ajax_testing(); return false;">Нажать</button>
</body>
</html>


И угадай, что мне выдало? опять undefined. А с алертами работало :)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.