Как я могу изменить внешнюю переменную внутри моего AJAX? - PullRequest
0 голосов
/ 17 июня 2010

У меня все эти две проблемы.Я пытался использовать замечательный плагин tagSuggest Реми Шарпа, и он прекрасно работает.Пока я не попытаюсь использовать вызов AJAX для получения тегов из моей базы данных.

My setGlobalTags() прекрасно работает, с моим определенным myTagList вверху функции.Я хочу установить myTagList равным результату моего AJAX.Моя проблема в том, что я не могу ни вызвать setGlobalTags() изнутри своих функций успеха или ошибок, ни фактически изменить исходный myTagList.

Кроме того, я продолжаю сталкиваться и с этой другой проблемой.Я храню этот код на своей главной странице, и мой AJAX возвращает «успех» почти на каждой странице.Я только (и всегда) получаю предупреждение об ошибке, когда перехожу на страницу, которая на самом деле содержит что-то вроде id="ParentTags".Я не понимаю, почему это происходит, потому что мой $('#ParentTags').tagSuggest(); определенно после моего AJAX-вызова.

Я понимаю, что это, вероятно, просто какая-то глупая ошибка соглашений, но я новичок в этом, и яздесь, чтобы учиться у вас, ребята.Заранее спасибо!

$(function() {
        var myTagList = ['test', 'testMore', 'testALot'];

        $.ajax({
            type: "POST",
            url: 'Admin/GetTagList',
            dataType: 'json',
            success: function(resultTags) {
                myTagList = resultTags;
                alert(myTagList[0]);

                setGlobalTags(myTagList);
            },

            error: function() { 
                alert('Error');
                setGlobalTags(myTagList);
            }
        });

        setGlobalTags(myTagList);

        $('#ParentTags').tagSuggest();
    });

Ответы [ 3 ]

0 голосов
/ 17 июня 2010

Проверьте тип данных, которые вы передаете с сервера. Если это массив JSON, вам нужно использовать eval или $ .parseJSON, чтобы получить теги и установить их в глобальные теги. Поэтому, если вы вернете массив, ваш код будет таким:

$(function() {
        var myTagList = ['test', 'testMore', 'testALot'];

        $.ajax({
            type: "POST",
            url: 'Admin/GetTagList',
            dataType: 'json',
            success: function(resultTags) {
                myTagList = eval(resultTags);
                alert(myTagList[0]);

                setGlobalTags(myTagList);

                $('#ParentTags').tagSuggest();
            },

            error: function() { 
                alert('Error');
                setGlobalTags(myTagList);

                $('#ParentTags').tagSuggest();
            }
        });


    });
0 голосов
/ 17 июня 2010

Я использовал ответ Interjay (тот, который я принял) для первой половины моей проблемы.Чтобы заставить мой AJAX правильно работать на нужной странице, я просто изменил относительный URL-адрес с «Admin / GetTagList» на «GetTagList», потому что моя страница уже была под контроллером «Admin».

0 голосов
/ 17 июня 2010

На самом деле ваш звонок на $('#ParentTags').tagSuggest(); произойдет до вызова AJAX.Функция $.ajax немедленно возвращается до завершения вызова AJAX и до вызова функций error или success.Поэтому вам нужно переместить все, что вы хотите сделать после вызова AJAX, в функцию успеха / ошибки.

$(function() {
        $.ajax({
            type: "POST",
            url: 'Admin/GetTagList',
            dataType: 'json',
            success: function(resultTags) {
                setGlobalTags(resultTags);
                $('#ParentTags').tagSuggest();
            },

            error: function() { 
                //...
            }
        });
    });

Для второй части вопроса попытайтесь выяснить, какой ответ вы получаетесервер, чтобы помочь отследить ошибку:

error : function(xhr) {
    alert(xhr.status);
    alert(xhr.responseText);
    //you can use console.log instead of alert if using firebug
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...