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

Мой 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();
    });
0
Charmander 17 Июн 2010 в 17:55

3 ответа

Лучший ответ

На самом деле ваш вызов $('#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
}
0
interjay 17 Июн 2010 в 14:40

Проверьте тип данных, которые вы передаете с сервера. Если это массив 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
Mohan Gundlapalli 17 Июн 2010 в 14:03

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

0
Charmander 17 Июн 2010 в 14:58