我有以下功能:
function postToDrupal(contacts, source, owner) {
(function ($) {
$.post("/cloudsponge-post",function(contacts) {
alert(contacts);
});
}(jQuery));
}
我遇到的问题是,联系人似乎是在jQuery闭包之外定义的,但不在其中。我是一个javascript新手,所以这让我很困惑。如何才能发布此消息?
答案 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;
}