jQuery变量范围

时间:2013-06-28 08:06:53

标签: javascript jquery

我有以下功能:

function postToDrupal(contacts, source, owner) {
  (function ($) {
    $.post("/cloudsponge-post",function(contacts) {
      alert(contacts);
    });
  }(jQuery));
}

我遇到的问题是,联系人似乎是在jQuery闭包之外定义的,但不在其中。我是一个javascript新手,所以这让我很困惑。如何才能发布此消息?

4 个答案:

答案 0 :(得分:7)

当您将名称重新用作AJAX调用的回调函数参数时,您正在使用具有相同名称的新变量屏蔽变量。

function postToDrupal(contacts, source, owner) {
  (function ($) {
    $.post("/cloudsponge-post",function(data) {  // <-- !!
      console.log(contacts);  // the first parameter of postToDrupal()
      console.log(data);      // the response from the AJAX call
    });
  }(jQuery));
}

答案 1 :(得分:3)

您不需要在$ .post()函数中再次使用contacts作为参数。

如果你这样做,你在另一个变量$ .post。

在javascript中,变量是函数的本地变量,而不是块。

我喜欢这篇文章:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

这是理解javascript范围的非常好的阅读。还有一些你应该知道的“吊装”。

答案 2 :(得分:0)

试试这个:

function postToDrupal(contacts, source, owner) {
  $.post("/cloudsponge-post",function(responseData) {
    alert(responseData);
    alert(contacts);
  });
}

答案 3 :(得分:-1)

您可以将其用作同步ajax调用。重写代码并使用它。

function postToDrupal(contacts, source, owner) {
var result = undefined;
    $.ajax( {
            type : 'GET',
            url : '/cloudsponge-post',
            async: false,
            success : function(contacts) {          
                result = contacts;
            }
        });
        return result;
}