我正在尝试从ajax调用返回数据,然后我可以使用它。问题是函数本身被许多对象调用,例如:
function ajax_submit (obj)
{
var id = $(obj).attr('id');
var message = escape ($("#"+id+" .s_post").val ());
var submit_string = "action=post_message&message="+message;
$.ajax({
type: "POST",
url: document.location,
data: submit_string,
success: function(html, obj) {
alert (html);
}
});
return false;
}
这意味着在匿名'成功'函数内部我无法知道调用obj(或id)实际上是什么。我能想到的唯一方法就是将id附加到文档中,但这看起来有点过于粗糙。还有另一种方法吗?
答案 0 :(得分:7)
您可以使用封闭范围内的变量,这种技术称为“闭包”。所以:
function ajax_submit (obj)
{
var id = $(obj).attr('id');
var message = escape ($("#"+id+" .s_post").val ());
var submit_string = "action=post_message&message="+message;
$.ajax({
type: "POST",
url: document.location,
data: submit_string,
success: function(html) {
alert(obj.id); // This is the obj argument to ajax_submit().
alert(html);
}
});
return false;
}
答案 1 :(得分:4)
如果您尝试通过ajax将html加载到页面上,则可能需要考虑load()函数。
答案 2 :(得分:2)
JavaScript中的函数包含在定义它们的范围内(这是closure)。在这种情况下,每次调用ajax_submit()
时都会创建一个新的匿名成功回调函数,因此始终可以访问父作用域中的所有变量。
您的代码应该可以正常工作。如果你想要一个回调函数,可以将它作为参数传递给ajax_submit()
并像这样调用:
…
success: function(html, obj) {
callback(html);
}
…
答案 3 :(得分:0)
变量obj
,id
和message
都可以在匿名函数中使用。
这是因为Javascript中的一项功能称为 闭包 ,我建议您仔细阅读。
闭包的一般要点是函数将永远可以访问其定义的范围中存在的变量。
结果是你可以这样做:
success: function(html) {
alert (id);
alert (obj);
}
整天(但请注意,success函数中的obj
参数优先于ajax_submit函数中的obj
变量。)