【问题标题】:How can I alter an external variable from inside my AJAX?如何从 AJAX 内部更改外部变量?
【发布时间】:2010-06-17 13:55:30
【问题描述】:

我一直遇到同样的两个问题。我一直在尝试使用 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();
    });

【问题讨论】:

  • 什么?你是什​​么意思你不能调用你的“setGlobalTags”函数?是什么让你认为你做不到?这个函数是什么样子的?
  • 我可以在我的 AJAX 之外调用它。但在我的成功/错误函数中,我认为它不起作用。 (我试图将它滑入一个整数而不是一个数组,这是它作为参数查找的内容。我的代码没有崩溃,所以我认为 setGlobalTags 只是没有被调用。
  • 请不要删除已回答的部分问题。至于其余部分,错误是由无法从问题中推断出来的东西引起的。例如,您使用的相对 URL 在出现错误的页面上可能是错误的。
  • @interjay:这个主意不错,我去看看!

标签: javascript jquery ajax tags


【解决方案1】:

实际上,您对$('#ParentTags').tagSuggest(); 的调用将发生在 AJAX 调用之前。 $.ajax 函数在 AJAX 调用完成之前以及在调用 errorsuccess 函数之前立即返回。所以你需要在 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
}

【讨论】:

  • 这解决了我的第一个问题。谢谢! :D 但我仍然在我有我的 id="ParentTags" 的页面上收到错误。 :(
【解决方案2】:

检查您从服务器传递的数据类型。如果是 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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-04
      • 2014-10-12
      • 1970-01-01
      • 2021-12-08
      • 2013-09-01
      • 1970-01-01
      • 2014-10-10
      • 2019-07-05
      相关资源
      最近更新 更多