Вход

Просмотр полной версии : Возвращение результата.


gen552
24.06.2011, 18:48
Всем привет. Есть такой код.

var xmlHttp = createXMLHttpRequest();
var createUrl = 'phppages/handler.php';
xmlHttp.open('GET', createUrl, true);
xmlHttp.onreadystatechange = getObj;
xmlHttp.send(null);


function getObj ()
{
if (xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200)
{

var getObject = JSON.parse(xmlHttp.responseText);

}
else if (xmlHttp.status == 404)
{
alert("Страница не найдена! Ошибка 404.");
}
else
{
alert("Ошибка: статус кода " + xmlHttp.status);
}
}
}

Можно ли как то всё что хранится в var getObject вынести за пределы этой ф-ции? Т.е. чтобы я мог создать новую страницу, и работать с получеными данными там, а не писал трьох километровый код в этой ф-ции.

Обычно это делается через return. Но здесь это не проходит.

Sweet
24.06.2011, 19:00
Вообще, вариантов несколько. Но в основном принято использовать callback-функции. Принцип такой: if (xmlHttp.status == 200)
{
callback( JSON.parse(xmlHttp.responseText) );

gen552
24.06.2011, 21:21
Как правильно написать такую ф-цию? Можно по подробнее или ссылку.

walik
24.06.2011, 22:41
Вот элементарный пример как использовать callback в своих функциях:

function sum(a, b, callback) {
var s= a+b;
callback(s);
}

function showSum(s) {
alert(s);
}

sum(2, 3, showSum);

gen552
25.06.2011, 00:34
Что я не так делаю? Не получается.

var xmlHttp = createXMLHttpRequest();
var createUrl = 'phppages/handler.php';
xmlHttp.open('GET', createUrl, true);
xmlHttp.onreadystatechange = getObj (showRespText)
xmlHttp.send(null);


function getObj (callback)
{
if (xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200)
{
var txt = JSON.parse(xmlHttp.responseText);
callback(txt);
}
else if (xmlHttp.status == 404)
{
alert("Страница не найдена! Ошибка 404.");
}
else
{
alert("Ошибка: статус кода " + xmlHttp.status);
}
}
}

function showRespText(txt)
{
alert(txt);
}

getObj (showRespText)

gen552
25.06.2011, 01:43
Всё. Разобрался. Спасибо.
Но это все равно не то что я хотел.

melky
26.06.2011, 10:12
можно сделать запрос неасинхронным, тогда всё будет легче, но появится притормаживание

xmlHttp.open('GET', createUrl, *!*false*/!*);