在ajax()
函数中使用变量时遇到一些困难。我知道这是因为变量不在ajax()
调用的范围内,但不确定如何解决这个问题。我已经阅读了一些关于这样的事情的闭包和回调,但不确定如何将其实际应用到我的代码中。
代码摘要:在click()
上我通过ajax获得user_notes
,并在此成功时弹出一个显示user_notes
的对话框(目前为止所有这些都有效)。它崩溃的地方是当我按下“保存”按钮时尝试再做一次ajax调用。在那个范围内,第二个ajax调用user_notes
未定义。
如何在第二次ajax调用中使用user_notes
?
$(".editSaved").click(function() {
save_id = $(this).attr('id');
var user_notes;
//GET USER NOTES
$.ajax ({
url:"journal-util.php",
data:"q=0&f=user_notes&save_id="+save_id,
success: function(user_notes){
//BUILD SAVE DIALOG
div="<div><textarea rows=15 cols=27 id='RowSave'>"+user_notes+"</textarea></div>";
//AT THIS POINT USER_NOTES HAS A VALUE
success="<div>Updated!</div>";
$(div).dialog({
buttons: {
"Save": function() {
var that = this;
var un = user_notes; //tried this, didn't work
$.ajax ({
url:"journal-util.php",
data:"q=0&f=update&user_notes="+un, //un is empty
success: function(result){
alert(result);
$(that).dialog("close");
//$(success).dialog();
}
})
},
"Cancel": function() {
$(this).dialog("close");
}
},
modal: true,
title: 'Delete',
resizable: false
});
}
});
});
答案 0 :(得分:2)
您的代码无法正常工作的问题是,当您的第二个AJAX成功回调函数被触发时,值user_notes
保持可能已被更改或重置。要使其有效,您需要捕获该范围内user_notes
的值。
将“Save”回调替换为闭包,以在该范围内保存user_notes
值。
"Save": function (un) {
return function() {
var that = this;
$.ajax ({
url:"journal-util.php",
data:"q=0&f=update&user_notes="+un,
success: function(result){
alert(result);
$(that).dialog("close");
//$(success).dialog();
}
});
};
} (user_notes),
答案 1 :(得分:1)
试试这个解决方案
un = $('#RowSave').val();
希望这能解决您的问题
答案 2 :(得分:0)
您知道有两个user_notes
声明?一旦在click内部使用var,再次作为第一个ajax中的参数。第一个保持未定义,第二个仅在使用已定义参数调用success方法时定义。
小心重新定义嵌套作用域中的名称,这很令人困惑。
首先改变,然后如果成功方法的参数值是你想要的,你应该明确地将它保存到变量。
(我个人不会写那个嵌套代码。我可能会使用一个带有变量的对象来存储数据和一个that=this
- 引用,并且在ajax成功和失败时使用精简的内联函数包装器调用对象成员方法。我喜欢避免深度嵌套范围,并且需要水平滚动;)