gpt4 book ai didi

javascript - 将变量与 ajax 作用域一起使用 - 闭包?打回来?

转载 作者:行者123 更新时间:2023-11-30 13:26:40 26 4
gpt4 key购买 nike

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
});
}
});
});

最佳答案

为什么不起作用

您的代码无法正常工作的问题在于,当您的第二个 AJAX 成功回调函数被触发时,user_notes 持有的值可能已经被更改或重置。要使其正常工作,您需要在该范围内捕获 user_notesvalue

解决方案

将您的“保存”回调替换为闭包以将 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),

关于javascript - 将变量与 ajax 作用域一起使用 - 闭包?打回来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8237703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com