JQuery управления выполнением функций обратного вызова - PullRequest
0 голосов
/ 08 апреля 2010

Функция socialbookmarksTableData (data) вызывается другой функцией для генерации содержимого таблицы - данные являются объектом JSON. Внутри функции я вызываю 2 другие функции, которые используют getJSON и POST (с json в качестве возвращаемого объекта), чтобы получить некоторые данные. Проблема в том, что хотя функции выполняются правильно, я получаю неопределенное значение для 2 переменных (bookmarkingSites, bookmarkCategories). Помогите с решением, пожалуйста.

    function socialbookmarksGetBookmarkCategories(bookmarkID)
    {
        var toReturn = '';
        $.post("php/socialbookmark-get-bookmark-categories.php",{
            bookmarkID: bookmarkID
        },function(data){
            $.each(data,function(i,categID){
                toReturn += '<option value ="' + data[i].categID + '">' + data[i].categName + '</option>';
            })
            return toReturn;
        },"JSON");
    }

    function socialbookmarksGetBookmarkSites()
    {
        var bookmarkingSites = '';
        $.getJSON("php/socialbookmark-get-bookmarking-sites.php",function(bookmarks){

            for(var i = 0; i < bookmarks.length; i++){
                //alert( bookmarks[i].id);
                bookmarkingSites += '<option value = "' + bookmarks[i].id + '">' + bookmarks[i].title + '</option>';
            }
            return bookmarkingSites;
        });
    }
    function socialbookmarksTableData(data)
    {
        var toAppend = '';
        var bookmarkingSites = socialbookmarksGetBookmarkSites();


        $.each(data.results, function(i, id){

            var bookmarkCategories = socialbookmarksGetBookmarkCategories(data.results[i].bookmarkID);
    //rest of the code is not important
        });
    $("#searchTable tbody").append(toAppend);
}

Ответы [ 2 ]

0 голосов
/ 08 апреля 2010

Вам необходимо выполнить код в вашей функции socialbookmarksTableData в ответ на вызов $.getJSON.Проблема в том, что вы возвращаетесь сразу же, но обратный вызов JSON еще не сработал.

0 голосов
/ 08 апреля 2010

Вы возвращаете переменные из функций обратного вызова, а не из функций, которые вы фактически вызываете. После того, как функции обратного вызова вызваны, управление возвращается функциям, у которых нет операторов возврата, поэтому они «возвращают» неопределенные по умолчанию. Вам нужно возвращать значения из социальных закладок GetCmarkCategories и социальных закладок GetBookmarkSites, а не только из функций обратного вызова внутри них.

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