代码之家  ›  专栏  ›  技术社区  ›  Charmander

如何从AJAX内部修改外部变量?

  •  0
  • Charmander  · 技术社区  · 14 年前

    我一直有这两个问题。我一直在尝试使用雷米夏普的精彩tagSuggest插件,它的作品很棒。直到我尝试使用AJAX调用从数据库中获取标记。

    我的 setGlobalTags() 从我的success或error函数内部,也没有实际更改原始的myTagList。

    id="ParentTags" . 我不明白为什么会这样,因为我的 $('#ParentTags').tagSuggest();

    $(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 回复  |  直到 14 年前
        1
  •  0
  •   interjay    14 年前

    实际上,你的电话 $('#ParentTags').tagSuggest(); 会发生的 之前 $.ajax 函数立即返回,在AJAX调用完成之前和 error success 函数已被调用。因此,您需要在AJAX调用之后将任何您想做的事情移动到success/error函数中。

    $(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
    }
    
        2
  •  0
  •   dotcoder    14 年前

    检查从服务器传递的数据类型。如果是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();
                }
            });
    
    
        });
    
        3
  •  0
  •   Charmander    14 年前

    我用interjay的答案(我接受的答案)来回答我的问题的前半部分。为了让我的AJAX在我需要的页面上正确运行,我只需将相对url从'Admin/GetTagList'更改为'GetTagList',因为我的页面已经在'Admin'控制器下了。