【问题标题】:jQuery: Passing variables to function upon successful $.get requestjQuery:在成功的 $.get 请求后将变量传递给函数
【发布时间】:2013-05-07 20:09:45
【问题描述】:

是否可以将预定义的变量传递给在成功的 jQuery $.get 请求时调用的函数?

如下例所示,PHP 脚本将返回“bar”:

var extra = "foo";
$.get(baar.php, function(data, extra){
    alert(extra + data);
});

因此,我的目标是成为一个向全世界宣布“foobar”的警报框。

谢谢。

【问题讨论】:

  • JavaScript 函数是闭包。只需引用变量即可。
  • ...也就是说,另一种选择是采用从$.get() 返回的jqxhr 对象并向其添加属性。该对象将作为回调的第三个参数以及this 值提供,允许您检索该属性。这有助于使您的函数可重用。

标签: javascript jquery variables get


【解决方案1】:

您不需要传递它,extra 将在回调中可用,因为 JavaScript 范围是如何工作的。所以:

var extra = "foo";
$.get('baar.php', function(data){
    alert(extra + data);
});

【讨论】:

  • 我可以修改extra变量吗?调用get 后它还能存活吗?
  • @Throoze 是的,但请记住 get 调用是异步的。 $.get 之后的行将在 get 请求完成之前运行,如果您在此处选中 extra,它将仍然包含未修改的值。
  • @bfavaretto:谢谢!那是我的代码的问题。异步调用。我想我得放一个settimeout,或者在请求完成时触发一个事件。
  • @Throoze 不要使用 setTimeout。一旦数据可用,您传递给 $.get 的函数就会被调用,所以从那里做任何您需要的事情(例如,调用另一个函数并提前传递数据)。
  • @Throoze 详细解释见stackoverflow.com/a/14220323/825789
【解决方案2】:

我不认为这是可能的。但你可以在函数内部使用外部变量

var extra = "foo";
$.get(baar.php, function(data){
    alert(extra + data);
});

【讨论】:

    【解决方案3】:

    我知道这篇文章很旧(呃),但我遇到了同样的问题,并认为我会为下一个人发布解决方案。基本上,就像 bfalvretto 上面所说的那样,jquery 的 .get() 和 .post() 函数是异步的,所以当它获得远程 url 时,变量的值是不同的。
    我的解决方案是将其中的 .get() 部分放入它自己的单独函数中,以限制回调的范围。 这是我想出的:

    $("#SomethingClick").click(function(e) {
       e.preventDefault();
    
        $.post("..getURL", { id: 123 }, function(data) {
           for (i = 0; i < data.rows.length; i++) {
            ExternalFunction(data.rows[i].Value1, data.rows[i].Value2);
        }
        });
    });
    ...
    function ExternalFunction(value1, value2) {
        $.get("/Core/ContactViewer/" + contactID, function (data2) {
            $("someoutputdiv").html("<div>" + value1 + ": " + value2 + "</div>");
        });
    }
    

    希望这会有所帮助。

    【讨论】:

    • 我不知道为什么这适用于我的情况,但确实如此,所以谢谢!我有一个 for 循环,每次迭代都会声明一个值,但它仍然使用所有 .get 回调的最终值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2011-01-18
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多