我尝试让用户输入一些数据,使用ajax发布它,之后使用该信息动态创建对象,但我的if语句不起作用。我需要代码处于点击功能之下,因为代码中的许多$(this)
定位我试图在ajax帖子之后触发。
$(document).on('click' , ".addition" , function(event) {
$(".submitfolder").click(function() {
var data3 = $("#form2 :input").serialize();
var data4 = $("#form2 :input").val();
nameforfolder = data4;
$.ajax({
url: "userfolders.php",
type: "POST",
data: data3,
success: function() {
var asd = 1;
}
});
if (asd > 0) {
//do stuff that needs data4.
} else {
//something
}
});
答案 0 :(得分:-1)
问题在于,在成功的函数中,您声明了一个仅在该函数中可见的新变量asd。因此,您应该在第一个函数中声明asd,然后在第二个函数中更改它。
var asd = 0;
$(".submitfolder").click(function() {
var data3 = $("#form2 :input").serialize();
var data4 = $("#form2 :input").val();
nameforfolder = data4;
$.ajax({
url: "userfolders.php",
type: "POST",
data: data3,
success: function() {
asd = 1;
}
});
答案 1 :(得分:-1)
您需要了解Javascript和AJAX是异步工作的,这意味着即使前一行尚未完成,javascript仍继续执行下一行代码!因此,您的if (asd > 0)
语句正在处理一个未定义执行时间的变量。因此,您必须将该逻辑放在success
调用的$.ajax
回调函数中。
如果您担心$(this)
,请使用众所周知的常见黑客
var _this = this;
最后,你应该得到这样的结论:
$(".submitfolder").click(function() {
...
var _this = this;
$.ajax({
url: "userfolders.php",
type: "POST",
data: data3,
success: function() {
var asd = 1;
if (asd > 0) {
// instead of $(this).hide()
$(_this).hide();
} else {
// something
}
}
});
});