Как установить возвращаемое значение AJAX в качестве переменной - PullRequest
3 голосов
/ 03 марта 2011

У меня следующий ajax-вызов, который выполняется успешно:

function fnFormatDetails ( oTable, nTr )
   {
            var aData = oTable.fnGetData( nTr );

            var memberid = 'memberid='+ aData[6];

            $.ajax({
                type: "POST",
                url: "shout.php",
                data: memberid,
                success: function(html) {
                    //$("#shout").html(html);   
                    var sOut = html.returned_val;
                }
            });

            return sOut;
        }

Если я удаляю закомментированную строку ($ ("shout"). Html (html) и использую div на моей странице,результаты отображаются нормально. Однако есть вторая функция, которая будет использовать результаты HTML из sOut и отображать их в правильном положении.

Файл PHP в shout.php просто «выводит» HTML на страницу (которыйзатем возвращается и отображается соответственно.

Я, к сожалению, не могу установить переменную sOut, в настоящее время основанную на результатах моего вызова ajax. Что мне не хватает?

Ответы [ 3 ]

5 голосов
/ 03 марта 2011

Если вы хотите, чтобы ваша функция возвращала то, что возвращается из вызова AJAX, вам нужно сделать вызов синхронно. Кроме того, это при условии, что результат "shout.php" является открытым текстом. Если это JSON или нет, вам нужно установить свойство dataType в вашем вызове на $.ajax.

function fnFormatDetails ( oTable, nTr ) {
    var aData = oTable.fnGetData( nTr );
    var memberid = 'memberid='+ aData[6];

    var result;

    $.ajax({
        type: "POST",
        url: "shout.php",
        data: memberid,
        async: false,
        success: function(data) {
            result = data;
        }
    });

    return result;
}
2 голосов
/ 03 марта 2011

Прежде всего, вы определяете sOut в методе обратного вызова success, и поэтому он не будет доступен для fnFormatDetails.

Во-вторых, по умолчанию $ .ajax работает в асинхронном режиме, поэтому всякий раз, когда вызывается «return sOut»обратный вызов успеха не был бы выполнен!

Я бы предложил вам вызвать какой-нибудь метод из успеха, который бы выполнял процесс, основанный на html.returned_val, или вы можете передать async: false в $ .ajax длясделать этот вызов синхронизированным.

1 голос
/ 08 ноября 2012

спасибо @Matt Huggins

async: false

это небольшое изменение кода исправило проблему, с которой я столкнулся с утра.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...