我继续遇到这两个问题。我一直在尝试使用Remy Sharp精彩的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 :(得分:0)
实际上,在 AJAX调用之前,您对$('#ParentTags').tagSuggest();
的调用将发生。在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
}
答案 1 :(得分:0)
检查从服务器传递的数据类型。如果是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();
}
});
});
答案 2 :(得分:0)
我在问题的前半部分使用了interjay的答案(我接受的答案)。为了让我的AJAX在我需要的页面上正确运行,我只是将相对URL从'Admin / GetTagList'更改为'GetTagList',因为我的页面已经在'Admin'控制器下。