我想将一些变量传递给AJAX调用:
e.g。
var moo = "cow noise";
$.ajax({
type: "POST",
url: "",
data: "",
success: function(data){
//return the variable here
alert(moo);
}
});
但是,moo
未定义。
note ,我故意将url
和data
留空 - 它们填充在我的代码中。
答案 0 :(得分:8)
我猜你的代码可能已作为jQuery包装在$(function(){ ... });
中。删除var
将使其基本上window.moo = "cow noise";
哪个有效,但污染了您不想要的命名空间。
不要试图污染全局命名空间,它会使您的其他代码难以调试。 使用闭包来解决你的问题:
var moo = "cow noise";
(function(moo){
$.ajax({
type: "POST",
url: "",
data: "",
success: function(data){
//return the variable here
alert(moo);
}
});
})(moo);
答案 1 :(得分:4)
这应该有效,看不出代码有什么问题。 Live demo
答案 2 :(得分:2)
只要变量在与$.ajax
- 调用相同的函数内定义,你就应该能够在moo
- 回调中使用success
,因为它在闭包内。
但是,如果ajax
- 调用是在其他地方进行的,则必须确保moo
位于同一范围内。这可以这样做:
function thatDefinesTheVariable () {
var moo = 'cow noise';
makeAjaxCall(moo);
}
function makeAjaxCall (moo) {
$.ajax({
type: "POST",
url: "",
data: "",
success: function(data){
//return the variable here
alert(moo);
}
});
}