0

I've got the following function:

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

The problem I'm having is, contacts seems to be defined outside the jQuery closure, but not inside it. I'm a javascript newbie so this is confusing me. How can I get this to post contacts?

4

4 回答 4

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));
}
于 2013-06-28T08:09:22.483 回答
3

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

如果你这样做了,你正在为 $.post 创建另一个本地变量。

在 javascript 中,变量是函数的局部变量,而不是块。

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

这是一本关于理解 javascript 作用域的很好的读物。还有一种叫做“提升”的东西你应该知道。

于 2013-06-28T08:09:19.307 回答
0

试试这个:

function postToDrupal(contacts, source, owner) {
  $.post("/cloudsponge-post",function(responseData) {
    alert(responseData);
    alert(contacts);
  });
}
于 2013-06-28T08:11:11.470 回答
-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;
}
于 2013-06-28T08:10:30.270 回答