如何使jquery操作等到另一个函数完成,所有内容都在同一个单击函数中?

时间:2016-08-22 15:25:24

标签: jquery ajax

我尝试让用户输入一些数据,使用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

   }
 });

2 个答案:

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