Я продолжаю испытывать те же две проблемы. Я пытался использовать замечательный плагин 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();
});
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
}
Проверьте тип данных, которые вы передаете с сервера. Если это массив 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();
}
});
});
Я использовал ответ Interjay (тот, который я принял) для первой половины моей проблемы. Чтобы заставить мой AJAX правильно работать на нужной мне странице, я просто изменил относительный URL-адрес с «Admin / GetTagList» на «GetTagList», потому что моя страница уже была под контроллером «Admin».
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.